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 //引用一个数组的构造器

相关文章推荐

pl/sql loop循环

--pl/sql loop循环 create or replace procedure add_users(name_in in varchar2) is --定义,:=表示赋值 v_num n...

[leetcode] 374. Guess Number Higher or Lower 解题报告

题目链接:https://leetcode.com/problems/guess-number-higher-or-lower/ We are playing the Guess Game....

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

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

Java 8之方法引用(Method References)

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

Java8 方法引用-Method References

前言怎样更好的引入Java8中的方法引用呢? 我们首先看一下一个简单的例子: Consumer con=(str)->System.out.println(str); ...

JDK8新特性:使用stream、Comparator和Method Reference实现集合的优雅排序

大家对java接口Comparator和Comparable都不陌生,JDK8里面Comparable还和以前一样,没有什么改动;但是Comparator在之前基础上增加了很多static和defau...

Java中方法调用参数传递的方式是传值,尽管传的是引用的值而不是对象的值。(Does Java pass by reference or pass by value?)

原文地址:http://www.javaworld.com/javaworld/javaqa/2000-05/03-qa-0526-pass.html 在Java中,所有的对象变量都是引用,Java...
  • jubincn
  • jubincn
  • 2012年02月03日 22:56
  • 3858

g++编译中遇到undefined reference to `GetAdaptersInfo@8'处理方法

我是个小白  从来没写过文所以先吧
  • sfguter
  • sfguter
  • 2014年11月24日 17:39
  • 820

Java8中的Reference

PlatformOS: OS X EI Capitan 10.11.6 (15G31) JAVA version: 1.8.0_45概述个人还是比较喜欢图形化的东西,所以这两天在看过Referenc...

设计模式: 8. 模版方法模式(Template Method)

1. 介绍1.1 针对的问题 不同程序员间随意设计某个功能需要应对不同情况进行多个实现, 但是不同的程序员设计会导致每个情况程序设计的风格差很多, 还很不规范. 重复设计严重有些设计在不同场合是可以复...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java8方法引用(Method reference)
举报原因:
原因补充:

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