Lambda表达式的方法引用
方法引用其实就是把一个已经存在的方法拿来用,不需要再写一遍代码。可以理解为:“别写重复的东西,直接拿来用”。比如,如果你要做一件事情,而某个方法已经写好了,那你就直接用它的名字就行,不用再写一个lambda表达式。
- 静态方法引用
想象你要把列表里的每个数字都打印出来,原来你可能会这样写:
list.forEach(n -> System.out.println(n));这其实就是每次把n传到System.out.println()方法里。
但println这个方法已经存在了,你可以直接用它的名字,像这样:
list.forEach(System.out::println);这样代码就更简洁了!不需要重复地写n ->了,因为Java知道要用println这个方法。
- 实例方法引用
假设你有一个对象apple,它有一个方法叫eat()。原来你可能会这么写:
list.forEach(item -> apple.eat(item));但其实apple.eat()已经写好了,所以你可以这样直接引用:
list.forEach(apple::eat);- 类方法引用
如果你有一个方法需要调用列表中每个对象的某个功能,比如字符串转换成大写:
list.forEach(str -> str.toUpperCase());因为toUpperCase()这个方法已经写好了,你可以直接用它的名字:
list.forEach(String::toUpperCase);- 构造方法引用
当你需要创建对象时,像这样:
Supplier<List<String>> supplier = () -> new ArrayList<>();new ArrayList()这个构造器已经写好了,所以可以直接用方法引用:
Supplier<List<String>> supplier = ArrayList::new;当lambda表达式只是简单调用一个已有方法时,就可以用方法引用。
用方法引用会让代码更简洁、少重复,不需要每次都写lambda表达式。
在Lambda表达式的方法引用中,主要有实例方法引用、静态方法引用、特殊方法引用和构造方法引用、数组引用这五种情况