JAVA8系列教程-方法引用样例
温馨提示:
本文最后更新于 2019年12月15日,已超过 1,826 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
在Java 8中,我们可以使用class::methodName
类型语法从类或对象中引用方法。让我们学习java 8中不同类型的可用方法引用。
1.方法引用的类型
Java 8允许四种类型的方法引用。
方法参考 | 描述 | 方法参考示例 |
---|---|---|
引用静态方法 | 用于从类中引用静态方法 | Math::max 相当于 Math.max(x,y) |
从实例引用实例方法 | 使用对所提供对象的引用来引用实例方法 | System.out::println 相当于 System.out.println(x) |
从类类型引用实例方法 | 在对上下文提供的对象的引用上调用实例方法 | String::length 相当于 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 ); |
输出:
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种方法引用。
学习愉快!
正文到此结束
- 本文标签: 其他
- 本文链接: https://www.v8en.com/article/244
- 版权声明: 本文由SIMON原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权