将列表映射到地图内的 DTO - java

qba*_*992 2 java collections java-8 java-stream

我有这样的集合:Map<Integer, List<MyObject>> collection 我想将整个列表映射MyObjectMyObjectDTO并返回带有映射列表的整个地图。

所以返回将是: Map<Integer, List<MyObjectDto>> collectionWithDtos

最简单、最快的方法是什么?我已经检查了几种使用流的方法,但没有一个产生我预期的结果。谢谢

Nik*_*las 7

这是使用以下简单调用的一种方法:

Map<Integer, List<MyObjectDto>> mappedCollection = collection.entrySet().stream()
        .collect(Collectors.toMap(
                Map.Entry::getKey, 
                e -> e.getValue()
                      .stream()
                      .map(myObject -> new MyObjectDto())  // mapping here
                      .collect(Collectors.toList())));
Run Code Online (Sandbox Code Playgroud)

基本上,您希望将其收集到具有相同密钥的相同结构的映射中。流式传输条目集Set<Map.Entry<Integer, List<MyObject>>>并使用以下命令将其映射到新映射中Collectors.toMap(Function, Function)

  • 密钥是相同的密钥:entry -> entry.getKey()
  • 值是相同的值 ( List),除了所有MyObject对象都映射到MyObjectDto,这可以使用另一个流执行。

只要我们不知道要映射的对象的结构,就必须自己将其添加到带有注释的行中。