对集合进行正序排列
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();}
对大集合进行批处理,转换为小集合
@Testpublic 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>*/@Testpublic 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>*/@Testpublic 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。
@SneakyThrowspublic 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;}
