在Java-8中,将返回的HashMaps收集成一个新的标识符。

问题描述 投票:0回答:1

我对Java流收集器框架不是很熟悉,我想解决一个实际问题,想使用流。

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

我有一个接口,其实现返回一个 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>>
java java-8 java-stream collectors
1个回答
1
投票

OK,根据你的评论,你可以这样做。

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

但是,如果你关心的是重复的密钥,你可以执行: toMap 带合并功能的收集器。

© www.soinside.com 2019 - 2024. All rights reserved.