对集合进行正序排列

https://www.cnblogs.com/zhuyeshen/articles/12529584.html

  1. list.stream().sorted(Comparator.comparing(FtExOrder::getCreateDate).reversed()).collect(Collectors.toList());
  1. List<QueryMemberAcctInfoRespDTO> list = response.getData().getData();
  2. //按照创建时间对集合进行正序排序
  3. list = list.stream().sorted(Comparator.comparing(QueryMemberAcctInfoRespDTO::getCrteTime)).collect(Collectors.toList());
  4. response.getData().setData(list);

list———需要处理的集合
FtExOrder——集合里面的对象
getCreateDate——排序的字段的get方法,因为我排序这个字段主要是日期
reversed()—设置正序反序,以日期为例,加了这个为最近的日期在上面

其中一个用法:
image.png

对集合取最大值

  1. if (list!=null && list.size()>0){
  2. //取对应费款所属期的最大值
  3. uebmiClctDetlDTO = list.stream()
  4. .filter(u-> InsuEnum.INSU_310.getCode().equals(u.getInsutype()))
  5. .max(Comparator.comparing(UebmiClctDetlDTO::getAccrymEnd)).get();
  6. }

对大集合进行批处理,转换为小集合

  1. @Test
  2. public void testJoin() {
  3. List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 33, 6);
  4. List<List<Integer>> partition = Lists.partition(list, 2);
  5. for (List<Integer> integerList : partition) {
  6. System.out.println(integerList);
  7. }
  8. }

image.png
批处理 如果你的list过长有几万条 就会内存溢出
经常有这种导致服务挂掉
然后那个可以把一个list切割

使用Joiner.on连接(数组)和(集合), 设置分隔符

  1. public static void main(String[] args) {
  2. List<String> list = Lists.newArrayList();
  3. list.add("one");
  4. list.add("two");
  5. list.add("three");
  6. list.add("four");
  7. /**
  8. * 用->字符串将list内容连接
  9. * 结果:one->two->three->four,不用做二次处理
  10. */
  11. String value = Joiner.on("->").join(list);
  12. System.out.println(value);
  13. }
  1. private List<String> arr = Arrays.asList("Google", "Java", "RabbitMq");
  2. private List<String> arrHaveNullValue = Arrays.asList("Google", "Java", "RabbitMq", null);
  3. /**
  4. * 1. 可以使用join连接(数组)和(集合), 设置分隔符.
  5. * 2. 返回拼接之后的一个字符串.<result>
  6. */
  7. @Test
  8. public void testJoin() {
  9. String result = Joiner.on("#").join(arr);
  10. //equalTo匹配符表明两个字符串是否相等
  11. assertThat(result, equalTo("Google#Java#RabbitMq"));
  12. }
  13. /**
  14. * 1. 可以使用join连接(数组)和(集合), 设置分隔符.
  15. * 2. 若(数组)和(集合)中含有null, 会抛出NullPointerException.
  16. * 3. 可以使用skipNulls(), 去除null.
  17. * 4. 返回拼接之后的一个字符串.<result>
  18. */
  19. @Test
  20. public void test_Joiner_Skip_NullValue() {
  21. String result = Joiner.on("#").skipNulls().join(arrHaveNullValue);
  22. assertThat(result, equalTo("Google#Java#RabbitMq"));
  23. }

Stream流

一个 Stream 只可以使用一次
image.png
这块代码中,创建的流被我使用了2次,因此报错

  1. Random random=new Random();
  2. //random.ints(10)创建一个无穷大的int类型的数字流,这些数字在0(包括0)和10(不包括10)之间
  3. IntStream intStream = random.ints(10);
  4. //创建10个随机的整数流并打印出来
  5. intStream.limit(10).forEach(System.out::println);
  6. //这种原始int值的流,得到IntStream在转成集合是不行的,会报错。
  7. //random.ints(0, 100).limit(10).collect(Collectors.toList());
  8. //intStream.limit(10).boxed() 将int类型的流转成Stream<Integer>
  9. List<Integer> randomBetween0And10 = intStream.limit(10).boxed().collect(Collectors.toList());
  10. log.info("randomBetween0And10:",randomBetween0And10.toString());

判断集合中是否存在某一个数值?

arraylist.indexOf(Object obj)
从动态数组中返回指定元素的位置的索引值。
如果 obj 元素在动态数组中重复出现,返回在数组中最先出现 obj 的元素索引值。
如果动态数组中不存在指定的元素,则该 indexOf() 方法返回 -1。

  1. @SneakyThrows
  2. public UserPermCfgBDO queryByCertNoAndMac(UserPermCfgBDO userPermCfgBDO){
  3. HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
  4. List ipList= Arrays.asList(MacUtil.getIpAddr(request).trim().split(","));
  5. userPermCfgBDO.setDataStas("0");
  6. List<UserPermCfgBDO> list = userPermCfgBDAO.queryByCertNoAndMac(userPermCfgBDO);
  7. if (list!=null && list.size()>0){
  8. for (UserPermCfgBDO permCfgBDO : list) {
  9. if(ipList.indexOf(permCfgBDO.getMac())>-1){
  10. return permCfgBDO;
  11. }
  12. }
  13. }
  14. return null;
  15. }