gpt4 book ai didi

java - Collectors.reducing 到列表

转载 作者:行者123 更新时间:2023-12-01 10:22:02 25 4
gpt4 key购买 nike

考虑这个类:

@Data
@AllArgsConstructor
@NoArgsConstructor
class User {
String name;
String languages;
}

我有一个 List<User>我想减少语言。输入:
List<User> list = new ArrayList<>();
list.add(new User("sam", "java"));
list.add(new User("sam", "js"));
list.add(new User("apollo", "html"));

预期输出:
[User(name=apollo, languages=html), User(name=sam, languages=java, js)]

我可以使用以下代码实现这一点:
List<User> l = list.stream()
.collect(Collectors.groupingBy(
u -> u.name,
Collectors.reducing((u1, u2) ->
new User(u1.name, u1.languages + ", " + u2.languages))))
.values()
.stream()
.filter(user -> user.get() != null)
.map(user -> user.get())
.collect(Collectors.toList());

System.out.println(l);

但是我不想创建两个流,可以使用单个流来实现吗?

最佳答案

您可以使用 Collectors.toMap() :

List<User> l = new ArrayList<> (list.stream()
.collect(Collectors.toMap(u -> u.name,
u -> new User (u.name,u.languages),
(u1, u2) -> new User(u1.name, u1.languages + ", " + u2.languages)))
.values());

关于java - Collectors.reducing 到列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61927722/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com