Java9系列第7篇:Java

IntStream.of(1, 2, 4)

      .filter(i -> i % 3 == 0)

      .findFirst()

      .ifPresentOrElse(System.out::println, () -> {  

          System.out.println("没有找到3的倍数");

      });



在1、2、4中没有3的倍数,所以输出结果如下



没有找到3的倍数




如果是下面的2、6、8数组被过滤,最终控制台输出结果为:6



IntStream.of(2, 6, 8)

      .filter(i -> i % 3 == 0)

      .findFirst()

      .ifPresentOrElse(System.out::println, () -> {

          System.out.println("没有找到3的倍数");

      });   // 6



### []( )1.2.回顾一下Java 8中的写法



#### []( )Java 8 Optional.isPresent():



如果使用Java 8 ,没有`ifPresentOrElse(Consumer,Runnable)`方法,上文中同样的代码你应该是这样写的:自己去写if和else进行判断。同样输出:没有找到3的倍数



OptionalInt opt = IntStream.of(1, 2, 4)

                        .filter(i -> i % 3 == 0)

                        .findFirst();

if (opt.isPresent()) {

 System.out.println(opt.getAsInt());

} else {

 System.out.println("没有找到3的倍数");

}




#### []( )Java 8 Optional.ifPresent():



`ifPresent()`方法在值不存在的时候,没有提供一个可选的操作。所以下面的代码在执行之后,没有orElse动作,没有任何输出,这样不是很友好。



IntStream.of(1, 2, 4)

      .filter(i -> i % 3 == 0)

      .findFirst()

      .ifPresent(System.out::println);



#### []( )Java 8 Optional.orElse():



`orElse()`方法在value返回值为空的之后,给出一个默认值。下文代码中给出一个默认值-1。



int result = IntStream.of(1, 2, 4)

                   .filter(i -> i % 3 == 0)

                   .findFirst()

                   .orElse(-1);

System.out.println(result); //-1




[]( )二、Java9的Optional.or(Supplier)

--------------------------------------------------------------------------------------



该方法在找不到值的时候,生成一个新的Optional出来。下文代码过滤数组\[‘a’, ‘b’, ‘c’\],isDigit判断数组中是否有数字字符,明显没有,所以findFirst找不到一个这样的值。所以生成一个默认值: `Optional.of('0')`



char digit = Stream.of(‘a’, ‘b’, ‘c’)

                .filter(e -> Character.isDigit(e))

                .findFirst()

                .or(() -> Optional.of('0')).get();

System.out.println(digit); //0




#### []( )Java8 中的 orElseGet()



Java 8中的`Optional.orElseGet()`方法也具备同样的功能。下文代码过滤数组\[‘a’, ‘b’, ‘c’\],isDigit判断数组中是否有数字字符,明显没有,所以findFirst找不到一个这样的值。所以通过orElseGet获取一个默认值: `'0'`



char result = Stream.of(‘a’, ‘b’, ‘c’)

                .filter(c -> Character.isDigit(c))

                .findFirst()

                .orElseGet(()->'0');

System.out.println(result); //0




[]( )三、Java9的Optional.stream()


### 最后

**文章中涉及到的知识点我都已经整理成了资料,录制了视频供大家下载学习,诚意满满,希望可以帮助在这个行业发展的朋友,在论坛博客等地方少花些时间找资料,把有限的时间,真正花在学习上,所以我把这些资料,分享出来。相信对于已经工作和遇到技术瓶颈的朋友们,在这份资料中一定都有你需要的内容。**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值