Java 映射字符串列表?

Java 映射字符串列表?,java,functional-programming,iterator,Java,Functional Programming,Iterator,我试图在列表中的每个字符串前加前缀: List line=Arrays.asList(“一”、“二”); List 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&g

我试图在
列表中的每个字符串前加前缀

List line=Arrays.asList(“一”、“二”);
List 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>
不存在类型变量R的实例,因此java.util.stream.stream符合java.util.List

如何为
列表的每个元素预先添加字符串?

您需要收集结果:

lines.stream().map(line->“+line).collect(collector.toList())


否则,返回类型是字符串流,与
列表不兼容

您需要收集结果:

lines.stream().map(line->“+line).collect(collector.toList())


否则,返回类型是一个字符串流,与列表不兼容。另一种方式是非常简洁,不使用流,替换列表中的元素:

lines.replaceAll(line -> "." + line);
该方法通过应用给定的
UnaryOperator
替换列表中的每个元素


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

List<String> result = new ArrayList<>(lines);
result.replaceAll(line -> "." + line);
列表结果=新的ArrayList(行);
结果.replaceAll(第->行“+行);
如果您使用的是Java 10+,它甚至更短:

var result = new ArrayList<>(lines);
result.replaceAll(line -> "." + line);
var result=新的ArrayList(行);
结果.replaceAll(第->行“+行);

另一种方法,非常简洁,不使用流,替换列表中的元素:

lines.replaceAll(line -> "." + line);
该方法通过应用给定的
UnaryOperator
替换列表中的每个元素


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

List<String> result = new ArrayList<>(lines);
result.replaceAll(line -> "." + line);
列表结果=新的ArrayList(行);
结果.replaceAll(第->行“+行);
如果您使用的是Java 10+,它甚至更短:

var result = new ArrayList<>(lines);
result.replaceAll(line -> "." + line);
var result=新的ArrayList(行);
结果.replaceAll(第->行“+行);

有没有一种不必导入收集器就可以预先添加到每一行的方法?为什么不导入它?这就是流的工作方式!您可以添加静态导入,例如
import static java.util.stream.Collectors.*
只编写
collect(toList())
。这是绝对的,但它并没有改变收集器实际上是收集结果的强制导入的事实^^^^实际上有一种不使用收集器的方法,但这显然是流使用的一个坏例子(因此请不要这样做^^):
最终列表returnList=new ArrayList();line.stream().map(line->“+line).forEach(line->returnList.add(line))这里不需要收集器,但我真的不明白这有什么意义!有没有一条捷径可以让我在不导入收集器的情况下预编到每一行?为什么不导入它?这就是流的工作方式!您可以添加静态导入,例如
import static java.util.stream.Collectors.*
只编写
collect(toList())
。这是绝对的,但它并没有改变收集器实际上是收集结果的强制导入的事实^^^^实际上有一种不使用收集器的方法,但这显然是流使用的一个坏例子(因此请不要这样做^^):
最终列表returnList=new ArrayList();line.stream().map(line->“+line).forEach(line->returnList.add(line))这里不需要收集器,但我真的不明白这有什么意义!这看起来好像改变了列表的位置。我需要返回一个新的列表,而不编辑我操作的列表。看起来它会更改列表的位置。我需要返回一个新列表,不编辑我操作的列表