sar*_*sar 9 java lambda java-8 java-stream
我有一个对象,
class Object2{
String name;
String id;
Map<String, String> customData;
}
class Object1{
List<Object2> obj1List;
}
Run Code Online (Sandbox Code Playgroud)
我想将object1列表中的这个customData Map转换成一个单独的map,如果键已经存在,我可以覆盖这些值.
这是lambda和Java 8的一种方式:
Map<String, String> map = new LinkedHashMap<>();
object1List.forEach(o1 ->
o1.getObject1List().forEach(o2 -> map.putAll(o2.getCustomData())));
Run Code Online (Sandbox Code Playgroud)
使用flatMap和toMap如下:
List<Object1> source = ...
Map<String, String> result =
source.stream()
.flatMap(e -> e.getObj1List().stream()
.flatMap(a -> a.getCustomData().entrySet().stream()))
.collect(toMap(Map.Entry::getKey, Map.Entry::getValue, (l, r) -> r));
Run Code Online (Sandbox Code Playgroud)
或者如果您正在处理单个Object1对象:
Object1 myObj = ...
Map<String, String> result =
myObj.getObj1List()
.stream()
.flatMap(a -> a.getCustomData().entrySet().stream())
.collect(toMap(Map.Entry::getKey, Map.Entry::getValue, (l, r) -> r));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
94 次 |
| 最近记录: |