码迷,mamicode.com
首页 > 其他好文 > 详细

Lambda表达式(二)

时间:2021-01-18 11:28:54      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:ora   构造   列表   text   方法   com   cti   静态   lam   

一、Java 8 内置的四大核心函数式接口

Consumer<T> :消费型接口

  void accept(T t);

Supplier<T> :供给型接口

  T get();

Function<T, R> :函数型接口

  R apply(T t);

Predicate<T> :断言型接口

  boolean test(T t);

 

二、方法引用

若Lambda体中的内容已经有方法实现了,可以使用方法引用(可以理解为方法引用是Lambda表达式的另一种表现形式)。

主要有三种语法格式:

1. 对象 :: 实例方法名

  例1:

  PrintStream ps = System.out;

  Consumer<String> con = (x) -> ps.println(x);

  改:

  Consumer<String> con1 = ps::println;

  Consumer<String> con2 = System.out::println;

  con2.accept("abc");

  例2:

  Employee emp = new Employee();

  Supplier<String> sup = () -> emp.getName();

  改:

  Supplier<Integer> sup1 = emp::getAge;

  Integer num = sup1.get();

2. 类 :: 静态方法名

  Comparator<Integer> com = (x, y) -> Integer.compare(x, y);

  改:

  Comparator<Integer> com1 = Integer::compare;

3. 类 :: 实例方法名

  BiPredicate<Stirng, String> bp = (x, y) -> x.equals(y);

  改:

  BiPredicate<String, String> bp2 = String::equals;  (对应 注意2))

注意:

1) Lambda 体中调用方法的参数列表与返回值类型,要与函数式接口中抽象方法的参数列表和返回值类型保持一致!

2)若Lambda 参数列表中的第一参数是 实例方法的调用者,第二个参数是实例方法的参数时,可以使用ClassName :: method (对象 :: 实例方法名 例:String::equal)

 

三、构造器引用

格式:  ClassName :: new ; 

  例1:

  Supplier<Employee> sup = () -> new Employee();

  // 构造器引用方式

  Supplier<Employee> sup1 = Employee::new;        (调用Employee的无参构造函数)

  Employee emp = sup1.get();

  例2:

  Function<Integer, Employee> fun = x -> new Employee(x);  (调用Employee的有一个参数的构造函数)

  Function<Integer, Employee> fun1 = Employee::new;

  Employee emp1= fun1.apply(10);

注意:需要调用的构造器参数列表要与函数式接口中抽象方法的参数列表保持一致!

 

四、数组引用

格式:  Type[] :: new ;

  Function<Integer, String[]> fun = x -> new String[x];

  String [] strs = fun.apply(10);

  改:

  Function<Integer, String[]> fun1 = String[]::new;

  String [] strs1 = fun1.apply(20);

 

Lambda表达式(二)

标签:ora   构造   列表   text   方法   com   cti   静态   lam   

原文地址:https://www.cnblogs.com/xzjl-23/p/14289285.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!