java8方法引用(Method reference)

原创 2016年06月01日 10:59:40

java8方法引用(Method reference)

任何一个λ表达式都可以代表某个函数接口的唯一方法的匿名描述符。我们也可以使用某个类的某个具体方法来代表这个描述符,叫做方法引用。例如:

Integer::parseInt //静态方法引用
System.out::print //实例方法引用
Person::new       //构造器引用

下面是一组例子,教你使用方法引用代替λ表达式:

//c1 与 c2 是一样的(静态方法引用)
Comparator<Integer> c2 = (x, y) -> Integer.compare(x, y);
Comparator<Integer> c1 = Integer::compare;

//下面两句是一样的(实例方法引用1)
persons.forEach(e -> System.out.println(e));
persons.forEach(System.out::println);

//下面两句是一样的(实例方法引用2)
persons.forEach(person -> person.eat());
persons.forEach(Person::eat);

//下面两句是一样的(构造器引用)
strList.stream().map(s -> new Integer(s));
strList.stream().map(Integer::new);

使用方法引用,你的程序会变得更短些。现在distinctPrimarySum方法可以改写如下:

public void distinctPrimarySum(String... numbers) {
    List<String> l = Arrays.asList(numbers);
    int sum = l.stream().map(Integer::new).filter(Primes::isPrime).distinct().sum();
    System.out.println("distinctPrimarySum result is: " + sum);
}

还有一些其它的方法引用:

super::toString //引用某个对象的父类方法
String[]::new //引用一个数组的构造器

Java 8之方法引用(Method References)

Java 8中方法也是一种对象,可以By名字来引用。不过方法引用的唯一用途是支持Lambda的简写,使用方法名称来表示Lambda。不能通过方法引用来或者诸如方法签名的相关信息。方法引用的分类方法引用...
  • kimylrong
  • kimylrong
  • 2015年08月03日 13:48
  • 16100

java的四种引用

一.四种引用类型的解释: JVM会持有一般对象直到他们不再是可触及的状态。换句话说,当没有任何有效引用指向他们的时候会被垃圾回收,无效引用不会被计算在内。软引用指向的对象会在不存在任何指向他们的...
  • rabbit_in_android
  • rabbit_in_android
  • 2015年11月14日 09:46
  • 1483

java反射机制之Method invoke执行调用方法例子

原文:java反射机制之Method invoke执行调用方法例子 源代码下载地址:http://www.zuidaima.com/share/1843292395834368.htm ...
  • yaerfeng
  • yaerfeng
  • 2016年10月17日 09:38
  • 3458

在method方法被调用之后,仅打印出a=100,b=200,请写出method方法的代码

public class Test{public static void main(String[] args){int a = 10; int b = 10;method(a,b);//需要在met...
  • hong_93
  • hong_93
  • 2017年02月11日 12:55
  • 945

Java 8 官方教程翻译——方法引用(method reference)

你可能会使用lambda表达式创建匿名方法。然而有时lambda表达式仅仅调用了一个已存在的方法。这种情况下,直接使用该方法名会显得更加简洁。方法引用正是用在此处;他们是有名方法的紧凑而又易读的lam...
  • cwt8805
  • cwt8805
  • 2014年12月26日 14:43
  • 966

JAVA8之方法引用和构造引用

其实关于方法引用和构造引用大家可以简单理解为lambda的简写形式 一.方法引用 方法引用分为三类: 1.指向静态方法的方法引用 例子: public static void main(St...
  • zhang89xiao
  • zhang89xiao
  • 2016年07月13日 18:08
  • 2028

详解Java8特性之方法引用

前言在详解Java8特性之Lambda表达式 中我介绍了Java8中的Lambda表达式,通过Lambda表达式我们就可以快速地创建一个函数式接口的实例,可以说是大大简便了我们开发。你以为只能做到这么...
  • TimHeath
  • TimHeath
  • 2017年05月05日 12:49
  • 1010

java8 - 方法引用(method referrance)

方法引用的概念        某些lambda表达式里面仅仅是执行一个方法调用。在这种情况下,不用lambda表达式,直接通过方法名称引用方法的形式可读性更高一些,这种形式就是方法引用,方法引用是一...
  • wwwsssaaaddd
  • wwwsssaaaddd
  • 2014年07月08日 21:04
  • 10312

Java8新特性4--方法引用

方法引用 lambda 方法引用让你可以重复使用现有的方法定义,并像Lambda一样传递它们。在一些情况下, 比起使用Lambda表达式,它们更易读,感觉也更自然。 方法引用可以被看作仅仅...
  • wangyunpeng0319
  • wangyunpeng0319
  • 2018年01月04日 11:00
  • 44

java8系列之方法引用

概述在java 8中,我们习惯于使用Lambda表达式,来表示函数接口得引用。有时候在函数接口中,调用的是已经存在的方法。在这种情况下,java8提供了一个简写语法,那就是方法引用,进一步简化Lamb...
  • IO_Field
  • IO_Field
  • 2017年02月13日 10:37
  • 1022
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java8方法引用(Method reference)
举报原因:
原因补充:

(最多只允许输入30个字)