Java 8 方法引用
Java 8 中我们引用了Lambda 表达式,同样Lambda 表达式也有另一种写法,那就是方法引用,在java8 中我们可以使用class::methedName 类型语法引用来自类或者对象的方法,下面让我带领大家来学习一下方法引用
1. 方法引用的类型
方法引用 | 描述 | 方法引用实例 |
---|---|---|
静态方法 | 用于引用类中的静态方法 | Math:max相当于math.(x,y) |
来自实例的方法 | 使用对所提供的对象的引用来引用实例方法 | System.out::println相当于System.out.println(x) |
类类型的实例方法 | 对上下文提供的对象引用调用实例方法 | String::length 相当于str.length |
构造器 | 对构造器函数的引用 | ArrayList::new 相当于new ArrayList() |
2 对静态方法的引用
一个使用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));
3.对方法实例方法的方法引用
List<Integer> integers = Arrays.asList(1,12,433,5);
Optional<Integer> max = integers.stream().reduce( Math::max );
max.ifPresent( System.out::println );
4. 类 类型 对实例方法的引用
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);
5. 构造方法的引用
可以更新第一个方法,乙创建从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);