我有一个自定义类型,看起来像这样:
public class SampleObject {
private UUID id;
private List<ValueObject> values;
// getters, all-args constructor, etc.
}
ValueObject
只包含一些字符串。
我有一个List
的SampleObject
s payload
,在这个列表中,有几个对象有相同的id
,但是List<ValueObject>
中的值不同。
我想要归档的是合并具有相同id
的所有对象,并将ValueObject
的所有不同列表添加到一个合并对象中。
最后,我再次需要SampleObject
的列表。
我尝试了以下方法:
List<SampleObject> payload = // initializing the List
payload.stream().collect(Collectors.groupingBy(SampleObject::getId));
但是这会返回一个Map
的List
的SampleObject
s,我不知道如何合并这个Map值下的对象。
1条答案
按热度按时间g6ll5ycj1#
一个月
为了将对应于同一个
id
的所有ValueObject
合并在一起并存储到一个列表中,您可以使用收集器flatMapping()
,它需要一个从元素生成流的 * 函数 ( 类似于 *flatMap()
* 操作 *)和一个下游收集器,后者告诉您需要如何存储由 * 函数 * 生成的新元素。集合器
groupingBy()
和flatMapping()
的组合会给予你一个类型为Map<UUID, List<ValueObject>>
的Map。要从中产生SampleObject
的List
,你可以创建一个流Map条目,将每个条目转换成SampleObject
,然后将元素收集到一个List中。这就是实现的样子: