对集合进行正序排列
https://www.cnblogs.com/zhuyeshen/articles/12529584.html
list.stream().sorted(Comparator.comparing(FtExOrder::getCreateDate).reversed()).collect(Collectors.toList());
List<QueryMemberAcctInfoRespDTO> list = response.getData().getData();
//按照创建时间对集合进行正序排序
list = list.stream().sorted(Comparator.comparing(QueryMemberAcctInfoRespDTO::getCrteTime)).collect(Collectors.toList());
response.getData().setData(list);
list———需要处理的集合
FtExOrder——集合里面的对象
getCreateDate——排序的字段的get方法,因为我排序这个字段主要是日期
reversed()—设置正序反序,以日期为例,加了这个为最近的日期在上面
对集合取最大值
if (list!=null && list.size()>0){
//取对应费款所属期的最大值
uebmiClctDetlDTO = list.stream()
.filter(u-> InsuEnum.INSU_310.getCode().equals(u.getInsutype()))
.max(Comparator.comparing(UebmiClctDetlDTO::getAccrymEnd)).get();
}
对大集合进行批处理,转换为小集合
@Test
public void testJoin() {
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 33, 6);
List<List<Integer>> partition = Lists.partition(list, 2);
for (List<Integer> integerList : partition) {
System.out.println(integerList);
}
}
批处理 如果你的list过长有几万条 就会内存溢出
经常有这种导致服务挂掉
然后那个可以把一个list切割
使用Joiner.on
连接(数组)和(集合), 设置分隔符
public static void main(String[] args) {
List<String> list = Lists.newArrayList();
list.add("one");
list.add("two");
list.add("three");
list.add("four");
/**
* 用->字符串将list内容连接
* 结果:one->two->three->four,不用做二次处理
*/
String value = Joiner.on("->").join(list);
System.out.println(value);
}
private List<String> arr = Arrays.asList("Google", "Java", "RabbitMq");
private List<String> arrHaveNullValue = Arrays.asList("Google", "Java", "RabbitMq", null);
/**
* 1. 可以使用join连接(数组)和(集合), 设置分隔符.
* 2. 返回拼接之后的一个字符串.<result>
*/
@Test
public void testJoin() {
String result = Joiner.on("#").join(arr);
//equalTo匹配符表明两个字符串是否相等
assertThat(result, equalTo("Google#Java#RabbitMq"));
}
/**
* 1. 可以使用join连接(数组)和(集合), 设置分隔符.
* 2. 若(数组)和(集合)中含有null, 会抛出NullPointerException.
* 3. 可以使用skipNulls(), 去除null.
* 4. 返回拼接之后的一个字符串.<result>
*/
@Test
public void test_Joiner_Skip_NullValue() {
String result = Joiner.on("#").skipNulls().join(arrHaveNullValue);
assertThat(result, equalTo("Google#Java#RabbitMq"));
}
Stream流
一个 Stream 只可以使用一次
这块代码中,创建的流被我使用了2次,因此报错
Random random=new Random();
//random.ints(10)创建一个无穷大的int类型的数字流,这些数字在0(包括0)和10(不包括10)之间
IntStream intStream = random.ints(10);
//创建10个随机的整数流并打印出来
intStream.limit(10).forEach(System.out::println);
//这种原始int值的流,得到IntStream在转成集合是不行的,会报错。
//random.ints(0, 100).limit(10).collect(Collectors.toList());
//intStream.limit(10).boxed() 将int类型的流转成Stream<Integer>
List<Integer> randomBetween0And10 = intStream.limit(10).boxed().collect(Collectors.toList());
log.info("randomBetween0And10:",randomBetween0And10.toString());
判断集合中是否存在某一个数值?
arraylist.indexOf(Object obj)
从动态数组中返回指定元素的位置的索引值。
如果 obj 元素在动态数组中重复出现,返回在数组中最先出现 obj 的元素索引值。
如果动态数组中不存在指定的元素,则该 indexOf() 方法返回 -1。
@SneakyThrows
public UserPermCfgBDO queryByCertNoAndMac(UserPermCfgBDO userPermCfgBDO){
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
List ipList= Arrays.asList(MacUtil.getIpAddr(request).trim().split(","));
userPermCfgBDO.setDataStas("0");
List<UserPermCfgBDO> list = userPermCfgBDAO.queryByCertNoAndMac(userPermCfgBDO);
if (list!=null && list.size()>0){
for (UserPermCfgBDO permCfgBDO : list) {
if(ipList.indexOf(permCfgBDO.getMac())>-1){
return permCfgBDO;
}
}
}
return null;
}