zoukankan      html  css  js  c++  java
  • java_stream分组操作

    //User对象
    class
    User{ private Integer id; //用户名 private String username; //真实姓名 private String realName; //用户密码 private String password; //性别:1 女 0 男 private Integer gender; //生日 private Date birthday; //1管理员 2经理 3普通用户 private Integer userType; }

    1.过滤掉密码为空的,姓名也是空的用户

    List<User> user1 = users.stream().filter(x -> {
        return (x.getPassword() != null && !x.getPassword().isEmpty()) && (x.getUsername() != null && !x.getUsername().isEmpty());
    }).collect(Collectors.toList());
    //执行结果见下图

                                                               图-1

    由图-1可知,用户名字为空,或者密码为空,或者二者都为空的User对象都过滤掉了

    2.根据用户密码进行分组,(要求:如果key相同,则更新value)

    Map<String, String> groupMap = user1.stream().collect(Collectors.toMap(User::getPassword, User::getUsername,(key1,key2)->key2));
    //结果见下图

                                                                       图-2

    由 图-2,再结合 图-1 可以看出密码为 123456的name保留了最后一个User的名字

    3.最后完成对User进行复杂的排序
            // 先用户名字不为空,而且用户密码也不为空过滤, 再按用户信用分数进行降序,再按照用户日期进行排序,再按照用户名字进行排序
            Comparator<User> totalComparator =
                     Comparator.comparing(User::getScore).reversed()
                    .thenComparing(User::getBirthday)
                    .thenComparing(User::getRealName);
    
             List<User> user11 = users.stream()
                    .filter(x -> ((!x.getUsername().isEmpty() && x.getUsername() != null) && (!x.getPassword().isEmpty() && x.getPassword() != null)))
                    .sorted(totalComparator).collect(Collectors.toList());
    
            System.out.println("排序前 : ");
            users.forEach(x -> System.out.println(x.toString()));
            System.out.println("End");
    
            System.out.println("先用户名字不为空,而且用户密码也不为空过滤, 再按用户信用分数进行降序,再按照用户日期进行升序,再按照用户名字进行升序");
            System.out.println("排序后(reversed表示降序,默认升序) : ");
            user11.forEach(x -> System.out.println(x.toString()));
            System.out.println("End");
    //结果见下图

                                                                                                                                  图-3

    图3 展示了先用户名字不为空,而且用户密码也不为空过滤, 再按用户信用分数进行降序,再按照用户日期进行排序,再按照用户名字进行排序




  • 相关阅读:
    BZOJ.3990.[SDOI2015]排序(DFS)
    BZOJ.1040.[ZJOI2008]骑士(树形DP)
    BZOJ.2246.[SDOI2011]迷宫探险(DP 记忆化搜索 概率)
    BZOJ.3209.花神的数论题(数位DP)
    UVA.1640.The Counting Problem / BZOJ.1833.[ZJOI2010]数字计数(数位DP)
    HDU.3652.B-number(数位DP)
    BZOJ.4514.[SDOI2016]数字配对(费用流SPFA 二分图)
    BZOJ.4832.[Lydsy1704月赛]抵制克苏恩(期望DP)
    BZOJ.1025.[SCOI2009]游戏(背包DP)
    BZOJ.3257.树的难题(树形DP)
  • 原文地址:https://www.cnblogs.com/pengtaotao/p/15716502.html
Copyright © 2011-2022 走看看