java - 在 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>>
解决方案
好的,根据您的评论,您可以这样做:
myinterfaceImpls.stream()
.flatMap(myImpl->myImpl.getDataWithDataKeys().entrySet().stream())
.collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue));
但是,如果您担心重复键,您可以toMap
使用合并功能执行收集器。
推荐阅读
- ssis - 将文件移动到相应文件夹
- php - MySQL 转换 Json 更改列名
- php - 使用 Codeception 和 3rd 方 REST API 进行功能测试
- r - 从两个数据框创建 R 中的比较对象以进行比较系统发育
- android - 项目已添加到 RecyclerView 但不可见
- php - What's the proper way to import 1.6M line file?
- aframe - camera's move is so lined inside camera tour
- websocket - Clojure Sente:Sente 在页面加载后向客户端发送后续消息并销毁视图
- java - 如何以编程方式在 hdfs 中创建/触摸文件?
- oauth-2.0 - 如何使用 OAuth2 身份验证设置 traefik