java 8 lambda表达式的list集合各种处理方式

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());

 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值