映射字符串列表?

时间:2018-04-06 14:07:34

标签: java functional-programming iterator

我尝试在List<String>

中添加每个字符串
List<String> lines = Arrays.asList("one", "two");
List<String> prependedLines = lines.stream().map(line -> "." + line);

但是会出现

之类的错误
no instance(s) of type variable(s) R exist so that java.util.stream.Stream<R> conforms to java.util.List<java.lang.String>

如何将字符串添加到List<String>的每个元素?

2 个答案:

答案 0 :(得分:6)

您需要收集结果:

lines.stream().map(line -> "." + line).collect(Collectors.toList());

否则,返回类型是字符串流,与List<String>

不兼容

答案 1 :(得分:0)

另一种方式,非常简洁,不使用流,可以就地替换列表中的元素:

lines.replaceAll(line -> "." + line);

List.replaceAll(...)方法通过应用给定的UnaryOperator来替换列表中的每个元素。

编辑:如果您想要一个包含修改过的元素的新列表,您可以先复制原始列表:

List<String> result = new ArrayList<>(lines);
result.replaceAll(line -> "." + line);

如果您使用的是Java 10+,它甚至更短:

var result = new ArrayList<>(lines);
result.replaceAll(line -> "." + line);