如何将地图映射到列表?

时间:2020-06-19 11:38:04

标签: java java-stream

我有此代码

Set<String> ccy = groupedPortfolio.values().stream()
            .map(accountStatusListMap -> accountStatusListMap.values().stream()
                    .map(portfolios -> portfolios.stream().map(Portfolio::getCcy)))
            .collect(Collectors.toSet());

用于groupedPortfolio的翻译,groupedPortfolio是将地图映射到投资组合中的货币集的地图。 在我的代码中,我有错误

Required type: Set<String>
Provided: Set<Stream<Stream<UUID>>>

如何正确执行?

2 个答案:

答案 0 :(得分:1)

我会尝试的。将所有流转换为投资组合中的一大流。 然后通过地图检索您想要的信息。

Set<String> ccy = groupedPortfolio.values()
     .stream()
     .flatMap(accountStatusListMap -> accountStatusListMap.values().stream())
     .flatMap(List::stream).map(Portfolio::getCcy)
     .collect(Collectors.toSet());

答案 1 :(得分:0)

找到除您之外的另一种解决方案:

Set<String> ccy = groupedPortfolio.values().stream() .map(accountStatusListMap -> accountStatusListMap.values().stream().map(Collection::stream) .flatMap(x -> x) .collect(Collectors.toSet()) .stream().map(Portfolio::getCcy) .collect(Collectors.toSet())) .collect(Collectors.toSet()) .stream() .map(Collection::stream) .flatMap(a -> a) .collect(Collectors.toSet());

从此 link 中查看完整的代码。