我正在学习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());