文章插图
2.2 实例分析
① Supplier接口分析
Supplier<Integer> supplier = new Supplier<Integer>() { @Override public Integer get() { //返回一个随机值 return new Random().nextInt(); } };看一下这段代码,我们通过创建一个 Supplier 对象,实现了一个 get 方法,这个方法无参数,返回一个值;所以,每次使用这个接口的时候都会返回一个值,并且保存在这个接口中,所以说是一个容器 。
② lambda表达式作为 Supplier
//② 使用lambda表达式,supplier = () -> new Random().nextInt(); System.out.println(supplier.get()); System.out.println("********************");上面的这段代码,我们使用 lambda 表达式返回一个 Supplier类型的接口,然后,我们调用 get 方法就可以获取这个值了 。
③ 方法引用作为 Supplier
//③ 使用方法引用 Supplier<Double> supplier2 = Math::random; System.out.println(supplier2.get());复制代码方法引用也是返回一个Supplier类型的接口 。
2.3 Supplier 实例2
我们看完第一个实例之后,我们应该有一个了解了,下面再看一个 。
/** * Supplier接口测试2,使用需要Supplier的接口方法 */ @Test public void test_Supplier2() { Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5); //返回一个optional对象 Optional<Integer> first = stream.filter(i -> i > 4) .findFirst(); //optional对象有需要Supplier接口的方法 //orElse,如果first中存在数,就返回这个数,如果不存在,就放回传入的数 System.out.println(first.orElse(1)); System.out.println(first.orElse(7)); System.out.println("********************"); Supplier<Integer> supplier = new Supplier<Integer>() { @Override public Integer get() { //返回一个随机值 return new Random().nextInt(); } }; //orElseGet,如果first中存在数,就返回这个数,如果不存在,就返回supplier返回的值 System.out.println(first.orElseGet(supplier)); }输出结果
文章插图
代码分析
Optional<Integer>%20first%20=%20stream.filter(i%20->%20i%20>%204)%20.findFirst();使用这个方法获取到一个%20Optional%20对象,然后,在%20Optional%20对象中有%20orElse%20方法%20和%20orElseGet%20是需要一个%20Supplier%20接口的 。
//optional对象有需要Supplier接口的方法%20//orElse,如果first中存在数,就返回这个数,如果不存在,就放回传入的数%20System.out.println(first.orElse(1));%20System.out.println(first.orElse(7));%20System.out.println("********************");%20Supplier<Integer>%20supplier%20=%20new%20Supplier<Integer>()%20{%20@Override%20public%20Integer%20get()%20{%20//返回一个随机值%20return%20new%20Random().nextInt();%20}%20};%20//orElseGet,如果first中存在数,就返回这个数,如果不存在,就返回supplier返回的值%20System.out.println(first.orElseGet(supplier));
- orElse:如果first中存在数,就返回这个数,如果不存在,就放回传入的数
- orElseGet:如果first中存在数,就返回这个数,如果不存在,就返回supplier返回的值
除了上面使用的%20Supplier%20接口,还可以使用下面这些%20Supplier%20接口 。%20IntSupplier%20、DoubleSupplier%20、LongSupplier%20、BooleanSupplier,使用方法和上面一样 。
2.5%20Supplier%20总结
①%20Supplier%20接口可以理解为一个容器,用于装数据的 。%20②%20Supplier%20接口有一个%20get%20方法,可以返回值 。
3%20Predicate%20接口
Predicate%20接口是一个谓词型接口,其实,这个就是一个类似于%20bool%20类型的判断的接口,后面看看就明白了 。
3.1%20Predicate%20实例
/**%20*%20Predicate谓词测试,谓词其实就是一个判断的作用类似bool的作用%20*/%20@Test%20public%20void%20test_Predicate()%20{%20//①%20使用Predicate接口实现方法,只有一个test方法,传入一个参数,返回一个bool值%20Predicate<Integer>%20predicate%20=%20new%20Predicate<Integer>()%20{%20@Override%20public%20boolean%20test(Integer%20integer)%20{%20if(integer%20>%205){%20return%20true;%20}%20return%20false;%20}%20};%20System.out.println(predicate.test(6));%20System.out.println("********************");%20//②%20使用lambda表达式,%20predicate%20=%20(t)%20->%20t%20>%205;%20System.out.println(predicate.test(1));%20System.out.println("********************");%20}输出结果
文章插图
3.2 实例分析
① Predicate 接口分析
//① 使用Predicate接口实现方法,只有一个test方法,传入一个参数,返回一个bool值 Predicate<Integer> predicate = new Predicate<Integer>() { @Override public boolean test(Integer integer) { if(integer > 5){ return true; } return false; } };
推荐阅读
- 清代西冷八家之陈鸿寿的曼生壶
- 器为茶之父 懂茶更要懂器
- 古代战争之吴魏赤壁之战 赤壁之战的故事
- 文玩|文玩菩提子为啥没能走上收藏之路?这其中说不尽的尴尬!
- 瓷器之王㎡㎡骨瓷
- 封神之我为龙吉公主 封神演义龙吉公主洪锦
- 青瓷之花汝窑为魁 白釉汝瓷更稀罕
- 茶具的十二先生
- 华为手机全家福系列
- 许红琴紫砂艺术特别赏析月之国色天香壶