1,跟据某个属性分组OfficeId
Map<String, List<IncomeSumPojo>> collect = list.stream().collect(Collectors.groupingBy(IncomeSumPojo::getOfficeId));
2,根据某个属性分组OfficeId,汇总某个属性Money
Map<String, Double> collect = list.stream().collect(Collectors.groupingBy(IncomeSumPojo::getOfficeId,Collectors.summingDouble(IncomeSumPojo::getMoney)));
3,根据某个属性添加条件过滤数据,
list = list.stream().filter(u -> !u.getAmount().equals("0.00")).collect(Collectors.toList());
4,判断一组对象里面有没有属性值是某个值
List<Menu> menuList = UserUtils.getMenuList();
boolean add = menuList.stream().anyMatch(m -> "plan:ctPlan:add".equals(m.getPermission()));
5,取出一组对象的某个属性组成一个新集合
List<String> tableNames=list.stream().map(User::getMessage).collect(Collectors.toList());
6.过滤 排除掉工号为201901的用户
List<User> userCommonList = userList.stream().filter(a ->!a.getJobNumber().equals("201901")).collect(Collectors.toList());
7.判断对象空
stream.filter(x -> x!=null)
stream.filter(Objects::nonNull)
8.判断字段空
stream.filter(x -> x.getDateTime()!=null)
9.求最小与最大,使用min max方法
//最小
Date minEntryDate = userList.stream().map(User::getEntryDate).min(Date::compareTo).get();
//最大
Date maxEntryDate = userList.stream().map(User::getEntryDate).max(Date::compareTo).get();
10.List 转map
/**
* List -> Map
* 需要注意的是:
* toMap 如果集合对象有重复的key,会报错Duplicate key ....
* user1,user2的id都为1。
* 可以用 (k1,k2)->k1 来设置,如果有重复的key,则保留key1,舍弃key2
*/
Map<Long, User> userMap = userList.stream().collect(Collectors.toMap(User::getId, a -> a,(k1,k2)->k1));
11.排序 可通过Sort对单字段多字段排序
//排序
//单字段排序,根据id排序
userList.sort(Comparator.comparing(User::getId));
//多字段排序,根据id,年龄排序
userList.sort(Comparator.comparing(User::getId).thenComparing(User::getAge));
12.去重 可通过distinct方法进行去重:
List<Long> idList = new ArrayList<Long>();
idList.add(1L);
idList.add(1L);
idList.add(2L);
List<Long> distinctIdList = idList.stream().distinct().collect(Collectors.toList());
12.1 对象去重:List<CorporateTreasury> obj = obj.stream().collect(Collectors .collectingAndThen( Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(CorporateTreasury::getName))), ArrayList::new));
13.根据多字段同时分组 统计:
Map<String, Long> caseTotal = statisticalAnalyses.stream().collect(Collectors.groupingBy(o -> o.getCreateTime() + "_" + o.getHandlingDepartmentName(), Collectors.counting()));
14.根据多字段同时分组 求和:
Map<String, Double> sumCase = statisticalAnalyses.stream().collect(Collectors.groupingBy(o -> o.getCreateTime() + "_" + o.getHandlingDepartmentName(), Collectors.summingDouble(StatisticalAnalysis::getSimplePenaltyAmount)));
15.正序:
list=list.stream().sorted(Comparator.comparing(VipCardVo::getVipCardType)).collect(Collectors.toList());
16.倒序: list=list.stream().sorted(Comparator.comparing(VipCardVo::getVipCardType).reversed()).collect(Collectors.toList());