Java 8 基础教程 - 方法引用

127 阅读1分钟
原文链接: www.codemore.top

在Java 8中可以通过class::methodName 的方式引用一个类或者实例的方法。

方法引用的类型

Java 8 有四种方法引用的形式

  • 引用静态方法:直接引用类的静态方法,例如 Math::max 等同于 Math.max(x,y)
  • 通过实例引用实例方法:例如:System.out::println 等同于System.out.println(x)
  • 通过类引用实例方法: 例如String::length 等同于 str.length()
  • 引用构造函数:例如 ArrayList::new 等同于 new ArrayList() 下面详细介绍一下这几种方法引用的形式:
引用静态方法

使用Math.max() 作为例子来解释:

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

输出:

5
通过实例引用实例方法

还是使用上面的例子,只需要更改最后一行代码即可

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

输出:

5
通过类引用实例方法

这里使用String::compareTo作为例子使用:

List<String> strings = Arrays
        .asList("how", "to", "do", "in", "java", "dot", "com");
 
List<String> sorted = strings
        .stream()
        .sorted((s1, s2) -> s1.compareTo(s2))
        .collect(Collectors.toList());
 
System.out.println(sorted);
 
List<String> sortedAlt = strings
        .stream()
        .sorted(String::compareTo)
        .collect(Collectors.toList());
 
System.out.println(sortedAlt);

输出:

[com, do, dot, how, in, java, to]
[com, do, dot, how, in, java, to]
引用构造函数

这里使用 ArrayList::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