当前位置: 移动技术网 > IT编程>开发语言>Java > 如何在java 8 stream表达式实现if/else逻辑

如何在java 8 stream表达式实现if/else逻辑

2020年05月13日  | 移动技术网IT编程  | 我要评论

payeasy官网,清明节法定假日几天,2012广交会

简介

在stream处理中,我们通常会遇到if/else的判断情况,对于这样的问题我们怎么处理呢?

还记得我们在上一篇文章lambda最佳实践中提到,lambda表达式应该越简洁越好,不要在其中写臃肿的业务逻辑。

接下来我们看一个具体的例子。

传统写法

假如我们有一个1 to 10的list,我们想要分别挑选出奇数和偶数出来,传统的写法,我们会这样使用:

  public void inforeach(){
    list<integer> ints = arrays.aslist(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

    ints.stream()
        .foreach(i -> {
          if (i.intvalue() % 2 == 0) {
            system.out.println("i is even");
          } else {
            system.out.println("i is old");
          }
        });
  }

上面的例子中,我们把if/else的逻辑放到了foreach中,虽然没有任何问题,但是代码显得非常臃肿。

接下来看看怎么对其进行改写。

使用filter

我们可以把if/else的逻辑改写为两个filter:

list<integer> ints = arrays.aslist(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

    stream<integer> evenintegers = ints.stream()
        .filter(i -> i.intvalue() % 2 == 0);
    stream<integer> oddintegers = ints.stream()
        .filter(i -> i.intvalue() % 2 != 0);

有了这两个filter,再在filter过后的stream中使用for each:

evenintegers.foreach(i -> system.out.println("i is even"));
oddintegers.foreach(i -> system.out.println("i is old"));

怎么样,代码是不是非常简洁明了。

总结

lambda表达式需要尽可能的简洁,我们可以用stream的filter来替代if/else业务逻辑。

本文的例子

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网