java将循环(while和for)转换为流
我已经开始使用Java8,并尝试将代码中的一些循环和旧语法转换为lambdas和streams
例如,我试图将while和for循环转换为stream,但我没有正确地进行转换:
List<String> list = new ArrayList<>();
if (!oldList.isEmpty()) {// old is a List<String>
Iterator<String> itr = oldList.iterator();
while (itr.hasNext()) {
String line = (String) itr.next();
for (Map.Entry<String, String> entry : map.entrySet()) {
if (line.startsWith(entry.getKey())) {
String newline = line.replace(entry.getKey(),entry.getValue());
list.add(newline);
}
}
}
}
我想知道是否可以将上面的示例转换为一个流,其中for循环中有一个while循环
# 1 楼答案
如上所述,在这里使用流并不能真正增加价值,因为它使代码更难阅读/理解。我知道你更多的是把它当作一种学习练习。也就是说,这样做是一种功能性更强的方法,因为它不会产生从流本身添加到列表中的副作用:
# 2 楼答案
您可以通过嵌套在从
oldList
列表创建的流中的流来实现它。嵌套流的作用是使用map
中定义的映射器从oldList
映射当前值,例如以下示例生成如下输出:
如果需要,建议的解决方案可以很容易地并行化。功能性方法,无副作用
# 3 楼答案
为了回答您的问题,这是一个单行:
# 4 楼答案
我不明白您为什么要在这里使用streams,但这是可能的
创建一些测试输入:
实际代码:
打印结果:
即: