
概述
在 java 8中,我们可以使用class::methodName类型的语法从类或对象中引用方法。接下来我们了解一下Java 8中不同类型的可用方法引用。
方法引用的类型
Java 8允许四种类型的方法引用。
方法引用描述方法引用示例引用 静态方法 用于从类中引用静态方法Math :: max等同于Math.max(x,y)从实例引用实例方法使用对所提供对象的引用引用实例方法System.out :: println等效于System.out.println(x)从类类型引用实例方法对上下文提供的对象的引用调用实例方法String :: length等效于str.length()引用 构造函数 引用构造函数ArrayList :: new等效于new ArrayList()
方法引用静态方法– Class :: staticMethodName
使用静态方法Math.max()的示例。
List integers = Arrays.asList(1,12,433,5); Optional max = integers.stream().reduce( Math::max ); max.ifPresent(value -> System.out.println(value));
输出
433
方法引用实例方法- ClassInstance::instanceMethodName
在上面的示例中,我们使用System.out.println(value)打印找到的最大值。我们可以使用System.out :: println打印该值。
List integers = Arrays.asList(1,12,433,5); Optional max = integers.stream().reduce( Math::max ); max.ifPresent( System.out::println );
输出
433
方法引用类类型的实例方法- class::instanceMethodName
在本例中,s1.compareTo(s2)被引用为String::compareTo。
List strings = Arrays .asList("how", "to", "do", "in", "java", "dot", "com"); List sorted = strings .stream() .sorted((s1, s2) -> s1.compareTo(s2)) .collect(Collectors.toList()); System.out.println(sorted); List 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]
引用构造函数- Class::new
可以更新第一种方法以创建1到100的整数列表。使用lambda表达式相当容易。要创建ArrayList的新实例,我们使用ArrayList :: new。
List integers = IntStream .range(1, 100) .boxed() .collect(Collectors.toCollection( ArrayList::new )); Optional max = integers.stream().reduce(Math::max); max.ifPresent(System.out::println);
输出:
99
这是Java 8 lambda增强功能中的4种方法引用。
原文链接:Java 8 method reference example