關於Jdk7與Jdk8對Collections進行分組的區別

先準備一點數據:app

 

public class User {
    private Integer id;
    private String type;
    private String name;
    private String date;spa

// omit setter and getter

}code

User user1 = new User(1,"張三","小學", "2017-03");
User user2 = new User(2,"李四","小學", "2017-03");
User user3 = new User(3,"王五","初中", "2017-02");
User user4 = new User(4,"馬六","高中", "2017-04");
User user5= new User(5,"jack","大學", "2017-04");blog

List<User > list = new ArrayList<>();get

list.add(user1 );
list.add(user2 );
list.add(user3 );
list.add(user4 );it

list.add(user5);class

 

如今想對用戶列表根據日期進行分組,獲得一個map: date -> List<User>。stream

Java7之前也許是這樣的:date

List<User> userList = Arrays.asList(user1, user2, user3, user5, user4);
        Map<String, List<User>> groupUserMap = Maps.newHashMap();
        for (User user : userList) {
            String month = user.getDate();
            if (groupUserMap.containsKey(month)) {
                groupUserMap.get(month).add(user);
            } else {
                groupUserMap.put(month, Lists.newArrayList(user));
            }
        }

 

有了Java8以後,一切很簡單了:List

Map<String, List<User>> groupUserMapOne =userList.stream().collect(Collectors.groupingBy(User::getDate));

若是想分組的List裏是User的name呢:

 Map<String, List<String>> userByDate = Stream.of(user1, user2, user3, user5, user4).collect(Collectors.groupingBy(User::getDate,
               Collectors.mapping(User::getName, Collectors.toList())));
        System.out.println(userByDate);
相關文章
相關標籤/搜索