Java流-将流结果从对象转换为另一个对象

问题描述 投票:0回答:1

我正在尝试实现将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) {}

java stream
1个回答
1
投票

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()));
© www.soinside.com 2019 - 2024. All rights reserved.