欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-26 08:05:21
简介在stream处理中,我们通常会遇到if/else的判断情况,对于这样的问题我们怎么处理呢?还记得我们在上一篇文章lambda最佳实践中提到,lambda表达式应该越简洁越好,不要在其中写臃肿的业...

简介

在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业务逻辑。

本文的例子

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