Java8 : stream and map transformations

标签 java collections java-8 java-stream

我想转List变成不同的东西。

我有一个像这样的 POJO 类(我在这里删除了 getters/setters):

public class Person {
   private String personId;
   private String registrationId;
}

A Person (personId) 可以有多个registrationId,如此不同Person实例可能引用同一个人(但具有不同的 registrationId)。

我有一个 List<Person> persons如下 3 个元素:

persons = [{"person1", "regis1"}, {"person1", "regis2"}, {"person2", "regis1"}];

我想要这样的东西(这样每个键都指向一个人,并且对于每个人我都得到了 registrationId 列表):

Map<String, List<String>> personsMap = [ "person1" : {"regis1", "regis2"}, "person2" : {"regis2"}]

我知道我可以做这样的事情:

Map<String, List<Person>> map = persons.stream().collect(Collectors.groupingBy(Person::getPersonId));

但我得到了一个Map<String,List<Person>>我想要一个 Map<String,List<String>>

有什么想法吗?

谢谢

最佳答案

使用Collectors.mappingPerson实例映射到相应的registrationId String:

Map<String, List<String>> map = 
    persons.stream()
           .collect(Collectors.groupingBy(Person::getPersonId,
                                          Collectors.mapping(Person::getRegistrationId,
                                                             Collectors.toList())));

关于Java8 : stream and map transformations,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52642822/

相关文章:

java - 使用数学和流在 Java 8 中重新映射数组

java - 我在哪里可以找到@Inject jar

java - MapStruct继承,不止一个配置原型(prototype)是application

java - 公共(public)端点上的 Spring Boot REST API 401?

java - 为什么存在WeakHashMap,却没有WeakSet?

Java 流操作调用

java - 在运行 gradle eclipse 任务之前是否需要关闭 Eclipse?

Java 的比较器契约

javascript - 将 Backbone.js JSON 响应填充到嵌套集合/模型内的嵌套集合中

java - Collection.stream() 的实现