如果在单流Java 8中重写else
我正在尝试使用流编写以下代码如果在单流Java 8中重写else,java,java-stream,Java,Java Stream,我正在尝试使用流编写以下代码 public static void main(String[] args) { List<String> l = new ArrayList<String>(); l.add("pavan"); l.add("kumar"); l.add("rajesh"); for(String s : l){ if(s.contains("pav
public static void main(String[] args) {
List<String> l = new ArrayList<String>();
l.add("pavan");
l.add("kumar");
l.add("rajesh");
for(String s : l){
if(s.contains("pavan")){
methodA();
}else if (s.contains("kumar")){
methodB();
}else{
System.out.println("C");
}
}
}
}
public static void main(String[] args) {
List<String> l = new ArrayList<String>();
l.add("pavan");
l.add("kumar");
l.add("rajesh");
l.stream().
filter(s->s.contains("pavan")).
findAny().map(s->methodB()).filter(s->s.contains("kumar")).map(s->methodC()).
orElse(methodA());
}
publicstaticvoidmain(字符串[]args){
列表l=新的ArrayList();
l、 添加(“pavan”);
l、 添加(“库马尔”);
l、 添加(“rajesh”);
for(字符串s:l){
如果(s.包含(“pavan”)){
方法a();
}否则,如果(s.包含(“kumar”)){
方法b();
}否则{
系统输出打印项次(“C”);
}
}
}
}
我使用streams尝试了以下方法
public static void main(String[] args) {
List<String> l = new ArrayList<String>();
l.add("pavan");
l.add("kumar");
l.add("rajesh");
for(String s : l){
if(s.contains("pavan")){
methodA();
}else if (s.contains("kumar")){
methodB();
}else{
System.out.println("C");
}
}
}
}
public static void main(String[] args) {
List<String> l = new ArrayList<String>();
l.add("pavan");
l.add("kumar");
l.add("rajesh");
l.stream().
filter(s->s.contains("pavan")).
findAny().map(s->methodB()).filter(s->s.contains("kumar")).map(s->methodC()).
orElse(methodA());
}
publicstaticvoidmain(字符串[]args){
列表l=新的ArrayList();
l、 添加(“pavan”);
l、 添加(“库马尔”);
l、 添加(“rajesh”);
l、 流()。
过滤器(s->s.contains(“pavan”))。
findAny().map(s->methodB()).filter(s->s.contains(“kumar”)).map(s->methodC())。
orElse(methodA());
}
上述代码从未执行过methodC()
任何人都可以在一个Java 8流中重写它吗?您只需使用forEach:
l.stream().forEach(s -> {
if (s.contains("pavan")) {
methodA();
} else if (s.contains("kumar")) {
methodB();
} else {
methodC();
}
});
只要调用
filter(s->s.contains(“pavan”)
,您就只能得到流中value包含pavan的结果。这是一个完全不同的过程。。。我不认为在这里尝试使用stream有什么意义,它并不意味着要替换if-else语句。我理解这一点。但是如果你真的想使用streams,我怎么能用lambdai编写代码。。。。3个步骤:l.stream().filter(s->s.contains(“pavan”).forEach(s->methodA())代码>l.stream().filter(s->s.contains(“kumar”).forEach(s->methodB())代码>l.stream().filter(s->!s.contains(“pavan”)和&!s.contains(“kumar”).forEach(s->methodC())
@MateoBarahona这是不同的,但是:它执行所有methodA()
调用,然后执行所有methodB()
调用等;原始代码将根据列表的内容交错调用。是的,而且由于流并不意味着替换if/else
,如果您想保持顺序,基本上您不能比if/else
做得更好。你需要明白这一点。如果你只想调用stream()
,那么就把你的if/else
放到流中,但是在这里它完全没有用。