用Java-8 Streams替换’for’循环中的if-else

我有以下简单的代码,我试图转换为function样式

for(String str: list){ if(someCondition(str)){ list2.add(doSomeThing(str)); } else{ list2.add(doSomethingElse(str)); } } 

是否可以用流替换这个循环? 我看到的唯一选择是使用两个不同的过滤条件迭代流两次。

听起来你可以只使用带有条件的map

 List list2 = list .stream() .map(str -> someCondition(str) ? doSomething(str) : doSomethingElse(str)) .collect(Collectors.toList()); 

简短而完整的示例将短字符串映射到小写字母,将长字符串映射到大写字母:

 import java.util.*; import java.util.stream.*; public class Test { public static void main(String[] args) { List list = Arrays.asList("abC", "Long Mixed", "SHORT"); List list2 = list .stream() .map(str -> str.length() > 5 ? str.toUpperCase() : str.toLowerCase()) .collect(Collectors.toList()); for (String result : list2) { System.out.println(result); // abc, LONG MIXED, short } } }