方法引用的实例

2020-12-27  本文已影响0人  逍遥白亦

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); 
上一篇 下一篇

猜你喜欢

热点阅读