这段代码中,创建了一个 Predicate 接口对象,其中,实现类 test 方法,需要传入一个参数,并且返回一个 bool 值,所以这个接口作用就是判断!
System.out.println(predicate.test(6));再看,调用 test 方法,传入一个值,就会返回一个 bool 值 。
② 使用lambda表达式作为 predicate
//② 使用lambda表达式,predicate = (t) -> t > 5; System.out.println(predicate.test(1)); System.out.println("********************");lambda 表达式返回一个 Predicate 接口,然后调用 test 方法!
3.3 Predicate 接口实例2
/** * Predicate谓词测试,Predicate作为接口使用 */ @Test public void test_Predicate2() { //① 将Predicate作为filter接口,Predicate起到一个判断的作用 Predicate<Integer> predicate = new Predicate<Integer>() { @Override public boolean test(Integer integer) { if(integer > 5){ return true; } return false; } }; Stream<Integer> stream = Stream.of(1, 23, 3, 4, 5, 56, 6, 6); List<Integer> list = stream.filter(predicate).collect(Collectors.toList()); list.forEach(System.out::println); System.out.println("********************"); }输出结果
![Java8之Consumer、Supplier、Predicate和Function攻略](http://img.jiangsulong.com/220403/2252011358-4.jpg)
文章插图
这段代码,首先创建一个 Predicate 对象,然后实现 test 方法,在 test 方法中做一个判断:如果传入的参数大于 5 ,就返回 true,否则返回 false;
Stream<Integer> stream = Stream.of(1, 23, 3, 4, 5, 56, 6, 6); List<Integer> list = stream.filter(predicate).collect(Collectors.toList()); list.forEach(System.out::println);这段代码调用 Stream 的 filter 方法,filter 方法需要的参数就是 Predicate 接口,所以在这里只要大于 5 的数据就会输出 。
3.4 Predicate 接口总结
① Predicate 是一个谓词型接口,其实只是起到一个判断作用 。② Predicate 通过实现一个 test 方法做判断 。
4 Function 接口
Function 接口是一个功能型接口,它的一个作用就是转换作用,将输入数据转换成另一种形式的输出数据 。
4.1 Function 接口实例
/** * Function测试,function的作用是转换,将一个值转为另外一个值 */ @Test public void test_Function() { //① 使用map方法,泛型的第一个参数是转换前的类型,第二个是转化后的类型 Function<String, Integer> function = new Function<String, Integer>() { @Override public Integer Apply(String s) { return s.length();//获取每个字符串的长度,并且返回 } }; Stream<String> stream = Stream.of("aaa", "bbbbb", "ccccccv"); Stream<Integer> stream1 = stream.map(function); stream1.forEach(System.out::println); System.out.println("********************"); }输出结果
文章插图
4.2 代码分析
① Function 接口分析
//① 使用map方法,泛型的第一个参数是转换前的类型,第二个是转化后的类型 Function<String, Integer> function = new Function<String, Integer>() { @Override public Integer apply(String s) { return s.length();//获取每个字符串的长度,并且返回 } };这段代码创建了一个 Function 接口对象,实现了一个 apply 方法,这个方法有一个输入参数和一个输出参数 。其中,泛型的第一个参数是转换前的类型,第二个是转化后的类型 。
在上面的代码中,就是获取字符串的长度,然后将每个字符串的长度作为返回值返回 。
② 重要应用 map 方法
Stream<String> stream = Stream.of("aaa", "bbbbb", "ccccccv"); Stream<Integer> stream1 = stream.map(function); stream1.forEach(System.out::println);在 Function 接口的重要应用不得不说 Stream 类的 map 方法了,map 方法传入一个 Function 接口,返回一个转换后的 Stream类 。
4.3 其他 Function 接口
除了上面使用的 Function 接口,还可以使用下面这些 Function 接口 。IntFunction 、DoubleFunction 、LongFunction 、ToIntFunction 、ToDoubleFunction 、DoubleToIntFunction 等等,使用方法和上面一样 。
4.4 Function 接口总结
① Function 接口是一个功能型接口,是一个转换数据的作用 。② Function 接口实现 apply 方法来做转换 。
5 总结
通过前面的介绍,已经对Consumer、Supplier、Predicate、Function这几个接口有详细的了解了,其实,这几个接口并不是很难,只是有点抽象,多加理解会发现很简单,并且特别好用!
本文到这里就结束了,喜欢的朋友可以帮忙转发和关注一下,感谢支持!文章有不当之处,欢迎指正!
推荐阅读
- 清代西冷八家之陈鸿寿的曼生壶
- 器为茶之父 懂茶更要懂器
- 古代战争之吴魏赤壁之战 赤壁之战的故事
- 文玩|文玩菩提子为啥没能走上收藏之路?这其中说不尽的尴尬!
- 瓷器之王㎡㎡骨瓷
- 封神之我为龙吉公主 封神演义龙吉公主洪锦
- 青瓷之花汝窑为魁 白釉汝瓷更稀罕
- 茶具的十二先生
- 华为手机全家福系列
- 许红琴紫砂艺术特别赏析月之国色天香壶