我有一个 EdmPortfolio 类型,它有 id (int)、name (String) 和标签,它是一个映射作为其成员。
EdmPortfolio 的 ID 为 1,名称为 Portfolio1,Map 可以具有以下值, 分析师约翰 地区,美国
我有一个列表,最后我想要一个 map ,其中包含所有投资组合中的所有 map 值。另一个 EdmPortfolio 的 id 可能为 2,名称为 Portfolio2,并与值(value)分析师 Smith 进行映射 英国地区
我想要一个包含值的组合 map 地区“美国”、“英国” 分析师“约翰”、“史密斯”
分析师和区域是 map 的关键。 它合并了两张 map 。我有以下代码,但我有点迷失
List<Map<Tag,String>> portfolioTagsList = new ArrayList<>();
for (EdmPortfolio edmPortfolio : edmPortfolioList) {
Map<Tag,String> portfolioTags = edmPortfolio.getPortfolioTags().entrySet()
.stream()
.filter(e -> (e.getValue() != ""|| e.getValue() !=null))
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue
));
portfolioTagsList.add(portfolioTags);
}
Map<Tag,String> finalTags = portfolioTagsList.stream()
.flatMap(m -> m.entrySet().stream())
.collect(Collectors.groupingBy(Map.Entry::getKey, Collectors.joining(",",Map.Entry::getValue)));
我收到无法从静态上下文引用非静态方法的消息。我如何实现这一目标?
感谢您的宝贵时间
最佳答案
我会做这样的事情:
Map<Tag,String> finalTags = edmPortfolioList.stream()
.flatMap(edmPortfolio -> edmPortfolio.getPortfolioTags().entrySet().stream())
.filter(e -> (e.getValue() != "" || e.getValue() !=null)) // this seems weird, but just keeping
.collect(Collectors.groupingBy(e -> e.getKey(),
Collectors.mapping(ev -> ev.getValue(),
Collectors.joining(",")));
顺便说一句:有什么理由将其分成两个流吗?
关于filter - Map 上的流和过滤操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47667565/