Java Lambda – Java构造函数引用
我们可以使用构造函数创建一个lambda表达式。
使用构造函数引用的语法是:
ClassName::new
关键字new指的是类的构造函数。编译器根据上下文选择一个构造函数。
import java.util.function.Function; import java.util.function.Supplier; public class Main{ public static void main(String[] argv){ Supplier<String> func1 = () -> new String(); System.out.println("Empty String:"+func1.get()); Function<String,String> func2 = str -> new String(str); System.out.println(func2.apply("www.w3cschool.cn")); Supplier<String> func3 = String::new; System.out.println("Empty String:"+func3.get()); Function<String,String> func4 = String::new; System.out.println(func4.apply("www.w3cschool.cn")); } }
上面的代码生成以下结果。
数组构造函数引用
我们可以使用数组构造函数创建一个数组如下。
ArrayTypeName::new
int [] :: new
是调用 new int []
。 new int []
需要一个 int
类型值作为数组长度,因此 int [] :: new
需要一个 int
类型输入值。
以下代码使用数组构造函数引用创建一个int数组。
import java.util.Arrays; import java.util.function.IntFunction; public class Main{ public static void main(String[] argv){ IntFunction<int[]> arrayCreator1 = size -> new int[size]; // Creates an int array of five elements int[] intArray1 = arrayCreator1.apply(5); System.out.println(Arrays.toString(intArray1)); IntFunction<int[]> arrayCreator2 = int[]::new; int[] intArray2 = arrayCreator2.apply(5); System.out.println(Arrays.toString(intArray2)); } }
上面的代码生成以下结果。
例2
通过使用 Function< Integer,Array Type>
,我们可以在声明中指定数组类型。
import java.util.Arrays; import java.util.function.Function; public class Main{ public static void main(String[] argv){ Function<Integer,int[]> arrayCreator3 = int[]::new; int[] intArray = arrayCreator3.apply(5); System.out.println(Arrays.toString(intArray)); } }
上面的代码生成以下结果。
例3
我们可以在创建二维数组时指定第一维的长度。
import java.util.Arrays; import java.util.function.IntFunction; public class Main{ public static void main(String[] argv){ IntFunction<int[][]> TwoDimArrayCreator = int[][]::new; int[][] intArray = TwoDimArrayCreator.apply(5); // Creates an int[5][] array intArray[0] = new int[5]; intArray[1] = new int[5]; intArray[2] = new int[5]; intArray[3] = new int[5]; intArray[4] = new int[5]; System.out.println(Arrays.deepToString(intArray)); } }
上面的代码生成以下结果。