![](/img/trans.png)
[英]How to insert the same value for multiple keys of an HashMap using Java Streams
[英]How to get the first value for each distinct keys using Java 8 streams?
例如:我有一個包含電子郵件的用戶對象列表。 我想收集具有不同電子郵件的用戶列表(因為具有相同電子郵件的兩個用戶可能是同一個人,所以我不關心差異)。 換句話說,對於每個不同的鍵(電子郵件),我想獲取使用該鍵找到的第一個值(用戶)並忽略其余的值。
這是我想出的代碼:
public List<User> getUsersToInvite(List<User> users) {
return users
.stream()
// group users by their e-mail
// the resulting map structure: email -> [user]
.collect(Collectors.groupingBy(User::getEmail, LinkedHashMap::new, Collectors.toList()))
// browse each map entry
.entrySet()
.stream()
// get the first user object for each entry
.map(entry -> entry.getValue().get(0))
// collect such first entries into a list
.collect(Collectors.toList());
}
有沒有更優雅的方式?
您可以使用Collectors.toMap(keyMapper, valueMapper, mergeFunction)
,使用電子郵件作為鍵,用戶作為值並通過始終返回第一個值來忽略鍵沖突。 從Map
,您可以通過調用values()
來獲取用戶。
public List<User> getUsersToInvite(List<User> users) {
return new ArrayList<>(users.stream()
.collect(Collectors.toMap(User::getEmail,
Function.identity(),
(u1, u2) -> u1))
.values());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.