Java 8 | 方法引用

作者: 懒癌正患者 | 来源:发表于2018-04-13 23:56 被阅读21次

    在 Java 8 中,我们可以通过 class::methodName 这种语法来引用类或者示例的方法。

    方法引用比较简单,我们直接使用例子来学习。需要知道 Java 8 中有4种类型的方法引用。

    引用静态方法 - Class:staticMethodName

    List<Integer> integers = Arrays.asList(1,12,433,5);
    Optional<Integer> max = integers.stream().reduce(Math::max);
    max.ifPresent(System.out.println(value));
    

    输出

    433
    

    使用实例引用实例方法 - ClassInstance::instanceMethodName

    在上面的例子中,使用 System.out.println(value) 来打印出了最大值。我们同样可以使用 System.out::println 来打印。

    List<Integer> integers = Arrays.asList(1,12,433,5);
    Optional<Integer> max = integers.stream().reduce( Math::max );
    max.ifPresent(System.out::println);
    

    输出

    433
    

    使用类引用实例方法 - Class::instanceMethodName

    这个例子中,s1.compareTo(s2) 可以用 String::compareTo 代替。

     List<String> strings = Arrays
                    .asList("I", "Love", "China", "Ever", "AND", "Forever");
    
     List<String> sorted = strings
                    .stream()
                    .sorted()
                    .collect(Collectors.toList());
    
    System.out.println(sorted);
    
    List<String> sortedAlt = strings
                    .stream()
                    .sorted(String::compareTo)
                    .collect(Collectors.toList());
    
    System.out.println(sortedAlt);
    

    输出:

    [AND, China, Ever, Forever, I, Love]
    [AND, China, Ever, Forever, I, Love]
    

    引用构造函数 - Class::new

    List<Integer> integers = IntStream
                    .range(1, 100)
                    .boxed()
                    .collect(Collectors.toCollection( ArrayList::new ));
     
    Optional<Integer> max = integers.stream().reduce(Math::max);
     
    max.ifPresent(System.out::println);
    

    输出:

    99
    

    上面就是 Java 8 中的 4 种方法引用。

    相关文章

      网友评论

        本文标题:Java 8 | 方法引用

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