在 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
具有合并功能的收集器。
我不太熟悉 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
具有合并功能的收集器。