Java 8 方法引用示例
Java 8 方法引用示例
在 Java 8 中,我们可以使用class::methodName
类型的语法从类或对象中引用方法。 让我们学习一下 Java 8 中可用的方法引用的不同类型。
Table of Contents
1\. Types of Method References
2\. Reference to static method - Class::staticMethodName
3\. Reference to instance method from instance - ClassInstance::instanceMethodName
4\. Reference to instance method from class type - Class::instanceMethodName
5\. Reference to constructor - Class::new
1. 方法引用的类型
Java 8 允许四种类型的方法引用。
方法引用 | 描述 | 方法引用示例 |
---|---|---|
静态方法的引用 | 用于从类中引用静态方法 | Math::max 等同于(x, y) -> Math.max(x,y) |
来自实例的实例方法的引用 | 使用所提供对象的引用来引用实例方法 | System.out::println 等同于x -> System.out.println(x) |
来自类类型的实例方法的引用 | 在上下文提供的对象的引用上调用实例方法 | String::length 等同于str -> str.length() |
构造器的引用 | 引用构造器 | ArrayList::new 等同于() -> new ArrayList() |
2. 静态方法的引用 – Class::staticMethodName
使用Math.max()
是静态方法的示例。
List<Integer> integers = Arrays.asList(1,12,433,5);
Optional<Integer> max = integers.stream().reduce( Math::max );
max.ifPresent(value -> System.out.println(value));
输出:
433
3. 来自实例的实例方法的引用 – 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 );
Output:
433
4. 来自类类型的实例方法的引用 – Class::instanceMethodName
在此示例中,s1.compareTo(s2)
称为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]
5. 构造器的引用 – Class::new
可以更新第一种方法,以创建一个从 1 到 100 的整数列表。使用 lambda 表达式非常简单。 要创建ArrayList
的新实例,我们已经使用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
这是 Java 8 lambda 增强特性中的方法引用的 4 种类型。
评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果