将字符串连接到 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
))