替换'for'循环中的if-else与Java-8流 [英] Replacing if-else within 'for' loops with Java-8 Streams
本文介绍了替换'for'循环中的if-else与Java-8流的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下简单的代码,我试图将其转换为函数样式。(String str:list){
b $ b if(someCondition(str)){
list2.add(doSomeThing(str));
}
else {
list2.add(doSomethingElse(str));
$ b 很容易用流代替这个循环吗?我看到的唯一选择是使用两种不同的过滤条件对流进行迭代。
解决方案听起来你可以使用<
List< String> code> map
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< String> list = Arrays.asList(abC,Long Mixed,SHORT);
列表< String> 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
}
}
}
I have following simple code that I am trying to convert to functional style
for(String str: list){
if(someCondition(str)){
list2.add(doSomeThing(str));
}
else{
list2.add(doSomethingElse(str));
}
}
Is it easily possible to replace this loop with stream? Only option I see is to iterate over the stream twice with two different filter conditions.
解决方案
It sounds like you can just use map
with a condition:
List<String> list2 = list
.stream()
.map(str -> someCondition(str) ? doSomething(str) : doSomethingElse(str))
.collect(Collectors.toList());
Short but complete example mapping short strings to lower case and long ones to upper case:
import java.util.*;
import java.util.stream.*;
public class Test {
public static void main(String[] args) {
List<String> list = Arrays.asList("abC", "Long Mixed", "SHORT");
List<String> 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
}
}
}
这篇关于替换'for'循环中的if-else与Java-8流的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文