java新特性学习------lambda方法引用、构造器使用、数组引用

本文详细介绍了Java中Lambda表达式的三种方法引用格式:对象::实例方法名、类::静态方法名、类::实例方法名,以及构造器引用和数组构造的方法。通过具体示例,展示了如何使用这些引用简化代码。

方法引用

方法引用:若lambda体中的内容有方法已经实现了,则可以直接引用

主要有三种格式:
  1. 对象::实例方法名
  2. 类::静态方法名
  3. 类::实例方法名

lambda表达式引用的函数无论是返回值还是参数都得与函数式接口保持一致,特别的,第三种格式要求(当第一个参数是实例方法的调用者,第二个参数是实例方法的参数时,才可以使用)

(1)对象::实例方法名

/*
  * 对象::实例方法名
  */
 @Test
 public void test() {
 PrintStream ps = System.out;
  Consumer<String> con = null;
  
  //形式一
  con = (x) -> System.out.println(x);
  con.accept("form_1");
  
  //形式二
  con = (x) -> ps.println(x);
  con.accept("form_2");
  
  //形式三
  con = System.out::println;
  con.accept("form_3");
  
  //形式四
  con = ps::println;
  con.accept("form_4");
  }

(2)类::静态方法名

/*
  * 类::静态方法名
  */
 @Test
 public void test2() {
 
  //形式一
  Comparator<Integer> cp1 = (x,y) -> Integer.compare(x, y);
  System.out.println(cp1.compare(3, 5));
  
  //形式二
  Comparator<Integer> cp2 = Integer::compare;
  System.out.println(cp2.compare(34, 34));
 }
  

3. 类::实例方法名

当第一个参数是实例方法的调用者,第二个参数是实例方法的参数时,才可以使用

/*
  * 类::实力方法名
  */
 @Test
 public void test3() {
  
  //形式一
  BiPredicate<String, String> bp = (x,y) -> x.equals(y);
  System.out.println(bp.test("sss", "sss"));
  
  //形式二
  BiPredicate<String, String> bp2 = String::equals;
  System.out.println(bp2.test("ddd", "aaa"));
 }
 
}
 

构造器引用

格式:ClassName::new

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

@Test
 public void test() {
  //得到无参构造新的Employee
  Supplier<Employee> sup = () -> new Employee();
  Employee emp = sup.get();
  System.out.println(emp);
  
  //得到一个参数的Employee
  Function<Integer, Employee> fun = (x) -> new Employee(x);
  Employee emp1 = fun.apply(23);
  System.out.println(emp1);
  
  //得到一个参数的第二种形式
  Function<Integer, Employee> fun2 = Employee::new;
  Employee emp2 = fun2.apply(34);
  System.out.println(emp2);
  
  //得到两个参数的Employee
  BiFunction<Integer, Integer, Employee> bf = Employee::new;
  Employee emp3 = bf.apply(34, 60000);
  System.out.println(emp3);
  
 }

数组构造

格式:Type::new

@Test
 public void test() {
  //形式一
  Function<Integer, String[]> fun = (x) -> new String[x];
  String[] newStrs = fun.apply(9);
  System.out.println(newStrs.length);
  
  //形式二
  Function<Integer, String[]> fun2 = String[]::new;
  String[] newStrs2 = fun2.apply(29);
  System.out.println(newStrs2.length);
   
 }
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值