1 回答
TA贡献2003条经验 获得超2个赞
首先,将集合分组Item::getId并将结果保存到Map<Integer, List<String>>. 其次,将每个条目变成一个项目并将它们收集在结果列表中。
List<Item> result = list
.stream()
// build a Map<Integer, List<String>>
.collect(Collectors.groupingBy(Item::getId, Collectors.mapping(Item::getType, Collectors.toList())))
.entrySet()
.stream()
// transform an entry to an item
.map(i -> new Item(i.getKey(), String.join(", ", i.getValue().toArray(new String[0]))))
.collect(Collectors.toList());
要清理流链,您可以在单独的方法中移动构造逻辑并使用对该方法的引用(例如map(Item::fromEntry):
public static Item fromEntry(Map.Entry<Integer, List<String>> entry) {
return new Item(
entry.getKey(),
String.join(", ", entry.getValue().toArray(new String[0]))
);
}
添加回答
举报