Java 8方法参考示例

Java 8中,我们可以使用class::methodName类型语法从类或对象中引用方法。让我们学习java 8中不同类型的可用方法引用

目录

1. 方法引用的类型 
2. 引用静态方法-Class :: staticMethodName 
3. 引用实例中的实例方法-ClassInstance :: instanceMethodName 
4. 引用类类型中的实例方法-Class :: instanceMethodName 
5. 引用构造函数-类别::新

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种方法引用

学习愉快!

saigon has written 1440 articles

Leave a Reply