首页 > 解决方案 > 在 Java-8 中使用新标识符将返回的 HashMap 收集到一个中

问题描述

我不太熟悉 Java Stream 收集器框架,我想解决一个现实世界的问题并想使用流。

这是实际问题的简化假设场景。

我有一个接口,其实现返回一个HashMap<Integer, Object>

interface myInterface{
  String getImplKey(); //just adding it for classification.
  Map<Integer, Object> getImplDataWithDataKeys(); //this is main functionality but different implementations. 
}

现在,如果我在 spring 中自动连接这个接口列表,spring 将在一个地方提供所有实现

我想编写一个代码,我可以从所有实现中收集数据并返回到 HashMap,Map 还会告诉数据属于哪个实现。

List<myInterface> myinterfaceImpls;

getAll Data(){
        myinterfaceImpls.stream()..... 
       call myInterfaceImpl.getDataWithDataKeys() ... 
       collect into Map with myInterface.getIdentifierKey() as key. and above myInterfaceImpl.getDataWithDataKeys() as value
get something in form Map<String,Map<Integer,Object>>

标签: javajava-8java-streamcollectors

解决方案


好的,根据您的评论,您可以这样做:

myinterfaceImpls.stream()
                 .flatMap(myImpl->myImpl.getDataWithDataKeys().entrySet().stream())
                 .collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue));

但是,如果您担心重复键,您可以toMap使用合并功能执行收集器。


推荐阅读