使用 Java 8 个流使用地图列表构建新地图
Construct a new map using List of Maps using Java 8 streams
我将下面的 json 数据(在示例中)转换为 List
Key value
Service1: DEACTIVATED
Service2: ACTIVATED
Service3: DEACTIVATED
例如:
[
{
name=Service1,
desiredState=DEACTIVATED
},
{
name=Service2,
desiredState=ACTIVATED
},
{
name=Service3,
desiredState=DEACTIVATED
}
]
据我了解,您的目标是将 List
List<Map<String,String>> myMap = .... // map which you have already.
Map<String,String> resultMap = myMap.stream()
.flatMap(map -> map.entrySet().stream()) // Get a flatMap of the entryset. This will form a stream of Map.Entry
.collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue(), (k1, k2) -> k2));
这里 (k1,k2) -> k2 是一个合并函数,以防在构建 resultMap 时相同键有多个条目。
如果我做得好,您需要以某种方式合并您的地图,使 name
键的值是映射到 desiredState
键的值的键。你可以这样做:
Map<String, String> result = listOfMaps.stream()
.collect(Collectors.toMap(
m -> m.get("name"),
m -> m.get("desiredState"),
(o, n) -> n));
这假设列表中的所有地图都有 name
和 desiredState
条目。必须提供 (o, n) -> n
合并功能,以防在创建 result
映射时发生冲突(即具有相同键的条目)。在这里,在旧值和新值之间,我选择了新值。
我将下面的 json 数据(在示例中)转换为 List
Key value
Service1: DEACTIVATED
Service2: ACTIVATED
Service3: DEACTIVATED
例如:
[
{
name=Service1,
desiredState=DEACTIVATED
},
{
name=Service2,
desiredState=ACTIVATED
},
{
name=Service3,
desiredState=DEACTIVATED
}
]
据我了解,您的目标是将 List
List<Map<String,String>> myMap = .... // map which you have already.
Map<String,String> resultMap = myMap.stream()
.flatMap(map -> map.entrySet().stream()) // Get a flatMap of the entryset. This will form a stream of Map.Entry
.collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue(), (k1, k2) -> k2));
这里 (k1,k2) -> k2 是一个合并函数,以防在构建 resultMap 时相同键有多个条目。
如果我做得好,您需要以某种方式合并您的地图,使 name
键的值是映射到 desiredState
键的值的键。你可以这样做:
Map<String, String> result = listOfMaps.stream()
.collect(Collectors.toMap(
m -> m.get("name"),
m -> m.get("desiredState"),
(o, n) -> n));
这假设列表中的所有地图都有 name
和 desiredState
条目。必须提供 (o, n) -> n
合并功能,以防在创建 result
映射时发生冲突(即具有相同键的条目)。在这里,在旧值和新值之间,我选择了新值。