java双冒号写法(Lambda的简写)

发布时间 2023-07-05 13:55:11作者: 看风景就

类似这种 Person::getName,双冒号写法,是Java8对Lambda表达式的简写

常见的简写场景有

以下是Java 8中方法引用的一些语法:

静态方法引用(static method)语法:classname::methodname 例如:Person::getAge
对象的实例方法引用语法:instance::methodname 例如:System.out::println
对象的超类方法引用语法: super::methodname
类构造器引用语法: classname::new 例如:ArrayList::new
数组构造器引用语法: typename[]::new 例如: String[]:new

注意:若Lamdba参数列表中的第一个参数是实例方法的调用者,而第二个参数是实例方法的参数时,可以使用ClassName::method (类::实例方法)


常见使用场景举例

String::valueOf         //x -> String.valueOf(x)

Object::toString        //x -> x.toString()

x::toString             //() => x.toString()

ArrayList::new          //() => new ArrayList<>()
 
Math::abs               //n -> Math.abs(n)

marry(this::buyHouse)   //marry(() -> this.buyHouse())

int[]::new              //length -> new int[length]

Stream.of(1, 2, 3, 4, 5, 6).min(Integer::compareTo)  //Stream.of(1, 2, 3, 4, 5, 6).min((a,b) -> a.compareTo(b))

//循环中使用
list.forEach(System.out::println);

list.forEach(new Demo()::print);

list.forEach(Demo::print);