加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

Java8之Consumer、Supplier、Predicate和Function攻略

发布时间:2019-08-05 13:43:55 所属栏目:建站 来源:Java星星
导读:来聊聊Consumer、Supplier、Predicate、Function这几个接口的用法,在 Java8 的用法当中,这几个接口虽然没有明目张胆的使用,但是,却是润物细无声的。为什么这么说呢? 这几个接口都在 java.util.function 包下的,分别是Consumer(消费型)、supplier(

这段代码,首先创建一个 Predicate 对象,然后实现 test 方法,在 test 方法中做一个判断:如果传入的参数大于 5 ,就返回 true,否则返回 false;

  1. Stream<Integer> stream = Stream.of(1, 23, 3, 4, 5, 56, 6, 6); 
  2.  List<Integer> list = stream.filter(predicate).collect(Collectors.toList()); 
  3.  list.forEach(System.out::println); 

这段代码调用 Stream 的 filter 方法,filter 方法需要的参数就是 Predicate 接口,所以在这里只要大于 5 的数据就会输出。

3.4 Predicate 接口总结

① Predicate 是一个谓词型接口,其实只是起到一个判断作用。 ② Predicate 通过实现一个 test 方法做判断。

4 Function 接口

Function 接口是一个功能型接口,它的一个作用就是转换作用,将输入数据转换成另一种形式的输出数据。

4.1 Function 接口实例

  1. /** 
  2.  * Function测试,function的作用是转换,将一个值转为另外一个值 
  3.  */ 
  4.  @Test 
  5.  public void test_Function() { 
  6.  //① 使用map方法,泛型的第一个参数是转换前的类型,第二个是转化后的类型 
  7.  Function<String, Integer> function = new Function<String, Integer>() { 
  8.  @Override 
  9.  public Integer apply(String s) { 
  10.  return s.length();//获取每个字符串的长度,并且返回 
  11.  } 
  12.  }; 
  13.  Stream<String> stream = Stream.of("aaa", "bbbbb", "ccccccv"); 
  14.  Stream<Integer> stream1 = stream.map(function); 
  15.  stream1.forEach(System.out::println); 
  16.  System.out.println("********************"); 
  17.  } 

输出结果

Java8之Consumer、Supplier、Predicate和Function攻略,建议收藏

4.2 代码分析

① Function 接口分析

  1. //① 使用map方法,泛型的第一个参数是转换前的类型,第二个是转化后的类型 
  2.  Function<String, Integer> function = new Function<String, Integer>() { 
  3.  @Override 
  4.  public Integer apply(String s) { 
  5.  return s.length();//获取每个字符串的长度,并且返回 
  6.  } 
  7.  }; 

这段代码创建了一个 Function 接口对象,实现了一个 apply 方法,这个方法有一个输入参数和一个输出参数。其中,泛型的第一个参数是转换前的类型,第二个是转化后的类型。

在上面的代码中,就是获取字符串的长度,然后将每个字符串的长度作为返回值返回。

② 重要应用 map 方法

  1. Stream<String> stream = Stream.of("aaa", "bbbbb", "ccccccv"); 
  2.  Stream<Integer> stream1 = stream.map(function); 
  3.  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这几个接口有详细的了解了,其实,这几个接口并不是很难,只是有点抽象,多加理解会发现很简单,并且特别好用!

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读