[英]How to get list of ids when using groupingBy in java lambda expression
假設我們有一個對象User
:
public class User {
private Integer id;
private Integer age;
private String name;
private String family;
public User() {}
public User(Integer id, Integer age, String name, String family) {
this.id = id;
this.age = age;
this.name = name;
this.family = family;
}
// getters and setters emited for brevity
}
我編寫了如下的 lambda 表達式,以根據對某些字段進行分組來獲得對象的平均年齡:
public static void main(String[] args) {
List<User> allUsers = new ArrayList<>();
allUsers.add(new User(1, 25, "Rasool", "Ghafari"));
allUsers.add(new User(2, 27, "Ali", "Sohrabi"));
allUsers.add(new User(3, 25, "Ali", "Azizkhani"));
allUsers.add(new User(4, 25, "Rasool", "Asadi"));
allUsers.add(new User(5, 27, "Ali", "Rasooli Sa'd Abad"));
allUsers.add(new User(6, 26, "Rasool", "Ameri"));
Map<List<Object>, Long> groupedResult =
allUsers.stream().collect(
groupingBy(
u -> Arrays.asList(u.getName()),
averagingDouble(User::getAge)
)
);
// result:
// {[Rasool] = 25.33, [Ali] = 26.33}
}
現在,我想在這個 lambda 中添加一些東西,但不知道該怎么做。 我想獲取每個組中分組對象的id
列表,可能是這樣的:
// {[Rasool, [1, 4, 6]] = 25.33, [Ali, [2, 3, 5]] = 26.33}
一點改變就足夠了:
Map<List<Object>, List<User>> groupedResult =
allUsers.stream().collect(
groupingBy(
u -> Arrays.asList(u.getName(), u.getAge()),
Collectors.toList()
)
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.