在 Java-8 中将返回的 HashMap 收集到一个具有新标识符的 HashMap

Collecting the returned HashMaps into one with new identifier in Java-8

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

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

我有一个接口,其实现 return 一个 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 将在一个地方提供所有实现

我想写一个代码,我可以从所有实现中收集数据,return到一个 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>>

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

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

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