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