我对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>>
OK,根据你的评论,你可以这样做。
myinterfaceImpls.stream()
.flatMap(myImpl->myImpl.getDataWithDataKeys().entrySet().stream())
.collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue));
但是,如果你关心的是重复的密钥,你可以执行: toMap
带合并功能的收集器。