Java xxList.stream().collect(Collectors.groupingBy(User::getCategory)); List對象集合按對象屬性分組、分組匯總、過濾等操作示例


userList.stream().collect(Collectors.groupingBy(User::getCategory));使用詳解及擴展。直接上代碼
(底部附帶異常)
@Test
    void contextLoads1() {
        User user0 = new User();
        user0.setId(0);
        user0.setNickname("name0");
        user0.setUsername("username0");
        user0.setCategory("學生");

        User user1 = new User();
        user1.setId(1);
        user1.setNickname("name1");
        user1.setUsername("username1");
        user1.setCategory("老師");

        User user2 = new User();
        user2.setId(2);
        user2.setNickname("name2");
        user2.setUsername("username2");
        user2.setCategory("教學主任");

        List<User> userList = new ArrayList<>();
        userList.add(user0);
        userList.add(user1);
        userList.add(user2);

    //跟據某個屬性分組
        Map<String, List<User>> userMap = userList.stream().collect(Collectors.groupingBy(User::getCategory));
        System.out.println(userMap);
     // 查詢結果 
// {學生=[User{id=0, nickname=name0, birthday=null, username=username0, password=null, status=null, createTime=null, updateTime=null, remarks=null}], // 老師=[User{id=1, nickname=name1, birthday=null, username=username1, password=null, status=null, createTime=null, updateTime=null, remarks=null}], // 教學主任=[User{id=2, nickname=name2, birthday=null, username=username2, password=null, status=null, createTime=null, updateTime=null, remarks=null}]}
    //根據某個屬性分組,匯總某個屬性
    Map<String, Integer> collect2 = userList.stream().collect(Collectors.groupingBy(User::getCategory,Collectors.summingInt(User::getId)));
    System.out.println(collect2);
    // 查詢結果
    // {學生=0, 老師=1, 教學主任=2}


    //根據某個屬性添加條件過濾數據
    userList = userList.stream().filter(u -> !u.getNickname().equals("name0")).collect(Collectors.toList());
    System.out.println(userList);
    // 查詢結果
    // [User{id=1, nickname=name1, birthday=null, username=username1, password=null, status=null, createTime=null, updateTime=null, remarks=null},
    // User{id=2, nickname=name2, birthday=null, username=username2, password=null, status=null, createTime=null, updateTime=null, remarks=null}]
    //判斷一組對象里面有沒有這個屬性值
    boolean add = userList.stream().anyMatch(m -> "name2".equals(m.getNickname()));
    System.out.println(add);

    //取出一組對象的某個屬性組成一個新集合
    List<String> Username=userList.stream().map(User::getUsername).collect(Collectors.toList());
    System.out.println(Username);
    // 查詢結果  
    // [username0, username1, username2]
 
        

User實體類

public class User implements Serializable {

    private static final long serialVersionUID=1L;

    /**
     * 主鍵
     */
    private Integer id;

    /**
     * 昵稱
     */
    private String nickname;
    /**
     * 類別
     */
    private String category;

    /**
     * 生日
     */
    private LocalDate birthday;

    /**
     * 用戶名
     */
    private String username;

    /**
     * 密碼
     */
    private String password;

    /**
     * 狀態 
     */
    private String status;

    /**
     * 創建時間
     */
    private LocalDateTime createTime;

    /**
     * 更新時間
     */
    private LocalDateTime updateTime;

    /**
     * 備注
     */
    private String remarks;
  
  // 省略set/get      
}

 element cannot be mapped to a null key 

 / / 按照 User 分組,此時 getCategory 有空值,就會報錯。

 // 改為,增加非空過濾。

 


免責聲明!

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



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