在 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 种方法引用。
网友评论