将字符串连接到 Java 流的所有元素
Concatenate a String to all elements of a Java stream
我有以下代码将 Spliterator<Map.Entry>
解析为 Map
:
Spliterator<Map.Entry<String, String>> spliterator = ///;
Map<String, String> myMap = (StreamSupport
.stream(spliterator, false)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)));
我想更改代码,例如我的 myMap
,每个键都与一个常量字符串连接。类似的东西:
Spliterator<Map.Entry<String, String>> spliterator = ///;
String myString = "hello";
String separator = "_";
Map<String, String> myMap = (StreamSupport
.stream(spliterator, false)
.collect(Collectors.toMap(myString+separator+Map.Entry::getKey, Map.Entry::getValue)));
我明白为什么这不起作用,但我没有找到好的方法(在流后不迭代 myMap
)。我不熟悉 Java 中的 Streams,所以我可能错过了一些明显的东西。
不能使用myString+separator+Map.Entry::getKey
,因为Map.Entry::getKey
不是字符串而是方法引用。您应该改为使用 lambda:
entry -> myString + separator + entry.getKey()
使用显式 lambda 函数而不是方法引用:
.collect(toMap(
e -> myString + separator + e.getKey(),
Map.Entry::getValue
))
我有以下代码将 Spliterator<Map.Entry>
解析为 Map
:
Spliterator<Map.Entry<String, String>> spliterator = ///;
Map<String, String> myMap = (StreamSupport
.stream(spliterator, false)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)));
我想更改代码,例如我的 myMap
,每个键都与一个常量字符串连接。类似的东西:
Spliterator<Map.Entry<String, String>> spliterator = ///;
String myString = "hello";
String separator = "_";
Map<String, String> myMap = (StreamSupport
.stream(spliterator, false)
.collect(Collectors.toMap(myString+separator+Map.Entry::getKey, Map.Entry::getValue)));
我明白为什么这不起作用,但我没有找到好的方法(在流后不迭代 myMap
)。我不熟悉 Java 中的 Streams,所以我可能错过了一些明显的东西。
不能使用myString+separator+Map.Entry::getKey
,因为Map.Entry::getKey
不是字符串而是方法引用。您应该改为使用 lambda:
entry -> myString + separator + entry.getKey()
使用显式 lambda 函数而不是方法引用:
.collect(toMap(
e -> myString + separator + e.getKey(),
Map.Entry::getValue
))