07. Java 8 方法引用

315 阅读1分钟

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);