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 展示了先用戶名字不為空,而且用戶密碼也不為空過濾, 再按用戶信用分數進行降序,再按照用戶日期進行排序,再按照用戶名字進行排序





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM