美文网首页
“方法引用” 学习笔记

“方法引用” 学习笔记

作者: freeseawind | 来源:发表于2018-08-05 14:20 被阅读0次
    开发环境
    • eclipse 4.7.3a
    • jdk 9
    前言

            通常使用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工程地址

    相关文章

      网友评论

          本文标题:“方法引用” 学习笔记

          本文链接:https://www.haomeiwen.com/subject/jegqvftx.html