java 8 stream表达式中实现if/else逻辑

最近整好遇到了这个问题,然后搜索显示都是大家都是借鉴国外某博主的写法

优化前:

   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");
            }
        });
    }

优化后:

         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);
        evenIntegers.forEach(i->System.out.println("i is even"));
        oddIntegers.forEach(i->System.out.println("i is old"));

,然后我就在想会不会有别的写法特此记录一下.

public void inForEach() {

        Map<Boolean, Consumer<Integer>> map = new HashMap<>();

        Consumer<Integer> consumer = c -> System.out.println("i is even");

        Consumer<Integer> consumer1 = c -> System.out.println("i is old");

        List<Integer> ints = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

        ints.forEach(i -> {

            map.put(true, consumer);

            map.put(false, consumer1);

            map.get(i % 2 == 0).accept(i);
        });

    }

以上代码就是通过java8的Consumer接口简单实现了我们的业务,感觉代码风格跟我们之前写的好像有点不太一样.之前我们都是先进行boolean 判断 然后再去执行相应的业务逻辑.但是上边的代码很明显就是先写出我们的业务逻辑,最后才开始进行boolean判断从而指定让程序去执行对应的业务逻辑.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。