我无法弄清楚如何处理清理我的一些代码来执行此操作:
我有一个列表 Context
对象。每个Context
有一个 String userId
和一个 Map<String, SomeObject> someObjects
.
我想将其扁平化为 Map<String, SomeObjects>
其中 kep 是 userId
.更具体地说:
class Context {
String userId;
Map<String, List<SomeObject>> // the String here is something other than userId
// other stuff, getters/setters
}
给定List<Context>
, 我想得到 Map<String, List<SomeObject>
但字符串实际上是 userId。
有没有一种干净的方法来做到这一点?
最佳答案
假设 Context
有一个 String userid
和一个 List<SomeObject> someObjects
:
Map<String, Set<SomeObject>> map = contexts.stream()
.collect(Collectors.toMap(Context::getUserid,
c -> c.getSomeObjects().values().stream()
.flatMap(Collection::stream)
.collect(Collectors.toSet())
));
这里的重点是 toMap()
的使用通过 userid
收集和 flatmap()
转Stream<List<SomeObject>>
进入Stream<SomeObject>
这样您就可以将它们收集到一个集合中。
关于java - 如何将这个包装 map 列表展平为另一种 map Java 8?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43195400/