“方法引用” 学习笔记

2018-08-05  本文已影响0人  freeseawind
开发环境
前言

        通常使用lambda表达式来创建匿名方法(或匿名内部类)。然而,有时候我们已存在一个可用的方法,我们系统直接访问类或者实例的已经存在的方法或者构造方法。Java 8引入了一种新语言特性——方法引用,简写lambda表达式中已经存在的方法。

方法的引用的方式
描述 例子
引用静态方法 ContainingClass::staticMethodName
引用对象的某个实例方法 containingObject::instanceMethodName
引用类型对象的方法 ContainingType::methodName
引用构造方法 ClassName::new

注意方法引用是一个Lambda表达式,其中方法引用的操作符是 "::"。

例子

需求:在公司中,我们通常会按员工的生日日期进行排序,以便发放生日礼物

我们先来看下使用Lambda表达式的例子

Arrays.sort(rosterAsArray,
    (Person a, Person b) -> {
        return a.getBirthday().compareTo(b.getBirthday());
    }
);

使用静态方法的例子

public static int compareByStaticMethod(Person a, Person b)
{
      return a.birthday.compareTo(b.birthday);
 }

Arrays.sort(rosterAsArray, MethodReference::compareByStaticMethod);

使用实例化对象方法的例子

public int compareByInstanceMethod(Person a, Person b)
{
      return a.birthday.compareTo(b.birthday);
 }

Object obj = new XX();

Arrays.sort(rosterAsArray, obj ::compareByInstanceMethod);

使用类型对象的方法

String[] stringArray = { "Barbara", "James", "Mary", "John", "Patricia", "Robert", "Michael", "Linda" };

Arrays.sort(stringArray, String::compareTo);
  
List<Person> list = new ArrayList<>();
 
list.stream().anyMatch(Person::isEmpty);

引用构造方法的例子

public static HashSet<String> asynBlock(Callable<HashSet<String>> callable) throws Exception
{
     return callable.call();
}

//
asynBlock(HashSet::new);

Github工程地址

上一篇下一篇

猜你喜欢

热点阅读