我有以下类(class)。
Class Person {
String value1;
List<KeyValue> keyValue;
}
Class KeyValue{
String key;
String value;
}
我想要输出 map 为 Map<String, String>
其中第一个字符串值 - Key 是 keyValue.getValue() ,它始终是唯一的,第二个字符串值 - value 是 value1。
我可以简单地迭代并执行性能,但是有什么方法可以使用 Stream 运算符来执行此操作并使代码可读格式。
最佳答案
对于给定 Person
的每个 KeyValue
,创建一个 map 条目。然后使用 flatMap
运算符将所有这些流展平为一个大流。最后,使用 toMap
收集器将其收集到 map 中。鉴于 KeyValue.getValue
返回的值始终是唯一的(根据您的问题陈述),因此可能不会发生键冲突。这是它的样子。
Map<String, String> keyToPersonMap = people.stream()
.flatMap(p -> p.getKeyValue().stream()
.map(kv -> new AbstractMap.SimpleEntry<>(kv.getValue(), p.getValue1())))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
关于java - 如何使用 Java Stream 运算符获取子值的子值并收集为 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59450595/