Java教程

java_stream分组操作

本文主要是介绍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 展示了先用户名字不为空,而且用户密码也不为空过滤, 再按用户信用分数进行降序,再按照用户日期进行排序,再按照用户名字进行排序



这篇关于java_stream分组操作的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!