我正在学习Java 8,遇到了一种情况。我必须在哪里遍历字符串列表,然后将它们转换为upperCase。可能的解决方案是流式处理列表。在Intellij的许多建议中,以下两项似乎很有用。

list.stream()
.map(String::toUpperCase)


要么

list.stream().
forEach(p -> p.toUpperCase())


我对使用哪个建议以及所有建议的用例感到困惑。我可以就所有建议使用哪种方法以及如何理解获得帮助吗?

最佳答案

除非您以terminal operation结束管道,例如Stream.map(),否则forEach()永远不会运行。但是在toUpperCase()中调用forEach()也不会做任何事情,因为字符串是不可变的。 String.toUpperCase()不会更改字符串;它返回一个新的。

如果您只想就地更新列表,则可以使用

list.replaceAll(String::toUpperCase);


它实际上将每个元素替换为传递函数的结果。

如果要将结果显示在新列表中,请使用map()片段和收集器:

List<String> list2 = list.stream()
        .map(String::toUpperCase)
        .collect(Collectors.toList());

10-07 16:19
查看更多