zoukankan      html  css  js  c++  java
  • 关于Jdk8对Collections进行分组

    一.功能

    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、list去重复:

    list = list.stream().distinct().collect(Collectors.toList());

    二.例子

    先准备一点数据:

    public class User {
        private Integer id;
        private String type;
        private String name;
        private String date;
    
    // omit setter and getter
    
    }
    
    User user1 = new User(1,"张三","小学", "2017-03");
    User user2 = new User(2,"李四","小学", "2017-03");
    User user3 = new User(3,"王五","初中", "2017-02");
    User user4 = new User(4,"马六","高中", "2017-04");
    User user5= new User(5,"jack","大学", "2017-04");
    
    List<User > list = new ArrayList<>();
    
    list.add(user1 );
    list.add(user2 );
    list.add(user3 );
    list.add(user4 );
    list.add(user5);

    现在想对用户列表根据日期进行分组,得到一个map: date -> List<User>。

    Java7以前也许是这样的:

    List<User> userList = Arrays.asList(user1, user2, user3, user5, user4);
            Map<String, List<User>> groupUserMap = Maps.newHashMap();
            for (User user : userList) {
                String month = user.getDate();
                if (groupUserMap.containsKey(month)) {
                    groupUserMap.get(month).add(user);
                } else {
                    groupUserMap.put(month, Lists.newArrayList(user));
                }
            }

    有了Java8之后,一切很简单了:

    Map<String, List<User>> groupUserMapOne =userList.stream().collect(Collectors.groupingBy(User::getDate));

    如果想分组的List里是User的name呢:

     Map<String, List<String>> userByDate = Stream.of(user1, user2, user3, user5, user4).collect(Collectors.groupingBy(User::getDate,
                   Collectors.mapping(User::getName, Collectors.toList())));
            System.out.println(userByDate);
  • 相关阅读:
    oracle 存储过程 技巧
    任何用户密码都能以sysdba角色登入
    DBA操作常用命令
    事务 脏数据
    Axis2 WebService(配置、发布、调用)
    C#接口
    纯CSS3实现的一些酷炫效果
    C#运算符大全_各种运算符号的概述及作用
    mvc图片上传到服务器
    C# .NET 基本概念
  • 原文地址:https://www.cnblogs.com/ZJOE80/p/10935806.html
Copyright © 2011-2022 走看看