我正在尝试实现将Stream更改为Stream的功能。作为输入参数,它获取流并返回流。
PersonData是有关某人的信息,并具有以下形式:{id: person1, Car: 'ford'}, {id: person1, Car: 'porsche'}, {id: person1, Car: 'seat'}
并且我想将这三个PersonData分组到一个对象Person中。结果应该是这样的:{id: person1, Cars: ['ford','porsche', 'seat']}
我想按ID分组,然后创建人员列表。我已经定义了表达式,但现在我想将其转换为Stream
public static Stream<Person> getPersonById(Stream<PersonData> stream) {
Map<String, List<String>> newMap = stream.collect(Collectors.groupingBy(PersonData::getID,
Collectors.mapping(PersonData::getCarName, Collectors.toList())
));
// TODO: Transform Map<String, List<String>> to Stream<Person>
return newMap;
}
更新:Person的构造函数是:
public Person(int id, List<String> Cars) {}
Person的构造函数很抱歉:Person(int id,列出汽车)
在这种情况下,您的代码应如下所示:
return newMap.entrySet().stream()
.map(e -> new Person(Integer.valueOf(e.getKey()), e.getValue()));
或者如果您想一次拍摄:
return stream.collect(Collectors.groupingBy(PersonData::getId,
Collectors.mapping(PersonData::getCarName, Collectors.toList())
)).entrySet().stream()
.map(e -> new Person(Integer.valueOf(e.getKey()), e.getValue()));