聊騷
相信大家都碰到過這樣的場景
需要將一個列表根據(jù)列表中的實體的某個字段進(jìn)行分類。
比較典型的場景就是我們查詢多對多的結(jié)果勇凭。
那么我們一般的方法就是:
- 創(chuàng)建Map,key為對應(yīng)字段,value為對應(yīng)列表榆俺;
- 遍歷列表,根據(jù)實體字段去map獲取對應(yīng)列表舒萎,再將數(shù)據(jù)放到對應(yīng)列表藐鹤。
邏輯比較簡單,但是還是要一定的代碼行數(shù)的登疗。
有沒有一種簡單的方法排截?guava的MultiMap就是
maven jar
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>26.0-jre</version>
</dependency>
代碼實例
private List<User> list = new ArrayList<>();
@Before
public void init(){
User user = new User();
user.setId(1L);
user.setName("張三");
user.setAge(23);
list.add(user);
user = new User();
user.setId(2L);
user.setName("李四");
user.setAge(22);
list.add(user);
user = new User();
user.setId(3L);
user.setName("張三");
user.setAge(25);
list.add(user);
}
@Test
public void testMultiMap() {
Multimap<String, User> multiMap = ArrayListMultimap.create();
for (User u : list) {
multiMap.put(u.getName(), u);
}
for (Map.Entry<String, Collection<User>> entry : multiMap.asMap().entrySet()){
System.out.println(entry.getKey());
}
}
@Test
public void testListToMap(){
Map<String, List<User>> userMap = new HashMap<>();
for (User u : list){
if (userMap.containsKey(u.getName())){
userMap.get(u.getName()).add(u);
}else {
List<User> users = new ArrayList<>();
users.add(u);
userMap.put(u.getName(), users);
}
}
for (Map.Entry<String, List<User>> entry : userMap.entrySet()){
System.out.println(entry.getKey());
}
}