如果在单流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
放到流中,但是在这里它完全没有用。