method reference example
在Java8里,我们可以使用“类::方法名”这种语法来表示,类或对象对方法的引用。让我们了解 java 8 中不同类型的可用方法引用。
方法引用的类型
Java8允许四种对于方法的引用
方法引用 | 描述 | 实例 |
---|---|---|
静态方法的引用 | 对类中静态方法的引用 | Math::max equivalent to Math.max(x,y) |
对指定实例方法的引用 | 使用一个实例对对象的方法引用 | System.out::println equivalent to System.out.println(x) |
对类的实例方法的引用 | 在引用上下文提供的对象时调用实例方法 | String::length equivalent to str.length() |
构造方法的引用 | 引用一个构造方法 | ArrayList::new equivalent to new ArrayList() |
静态方法的引用方法 - 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));
Output:
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 );
Output:
433
对类的实例方法的引用方法 – 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);
Output:
[com, do, dot, how, in, java, to]
[com, do, dot, how, in, java, to]
构造方法的引用 - Class::new
第一个方法可以被改为创建一个包含1到100的integers的列表。使用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);
网友评论