【问题标题】:Convert Map<UUID, List<T>> to List<T> in Java? [duplicate]在 Java 中将 Map<UUID, List<T>> 转换为 List<T>? [复制]
【发布时间】:2021-06-22 13:30:06
【问题描述】:

在我的 Java 项目(使用 Spring)中,我有以下 Map 并尝试将其转换为 List&lt;T&gt;,但它返回 List&lt;List&lt;T&gt;&gt; 和以下 stream()。那么,如何使用stream()在Java中将Map&lt;Long, List&lt;T&gt;&gt;转换为List&lt;T&gt;

final Set<UUID> set = demoMap.keySet();
final Map<UUID, List<EmployeeDTO>> employeeMap = demoService
                .getEmployees(new ArrayList<>(set));


List<EmployeeDTO> employeeList = employeeMap.values()
    .stream()
    .collect(Collectors.toList());

【问题讨论】:

标签: java spring list stream hashmap


【解决方案1】:

好吧,employeeMap.values() 为您提供了所有值。单个值是List&lt;EmployeeDTO&gt;,因此这些值的序列是Collection&lt;List&lt;EmployeeDTO&gt;&gt;。流变体是Stream&lt;List&lt;EmployeeDTO&gt;&gt;

您想要的是将此流中的单个元素映射到一系列元素(1 -> 0-many 映射)。

这样做的方法是flatMap。这使您可以将流中的 1 个项目映射到随后“集成”的流:

employeeMap
 .values()
 .stream()
 .flatMap(item -> item.stream())
 .collect(Collectors.toList());

【讨论】:

  • 不幸的是没有工作。
【解决方案2】:

使用 flatMap 连接子列表

List<EmployeeDTO> employeeList = employeeMap.values()
    .stream()
    .flatMap(list -> list.stream())
    .collect(Collectors.toList());

【讨论】:

    猜你喜欢
    • 2021-11-26
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多