为什么 generateEmptyArrayBySize
方法接收 0
而不是 3
作为输入?
我期待收到列表大小。
public class CollectionToArrayTest {
public static void main(String[] args) {
var list = List.of(1, 2, 3);
var array = list.toArray(CollectionToArrayTest::generateArrayBySize);
out.println("array: " + Arrays.toString(array)); // array: [1, 2, 3]
}
private static Integer[] generateArrayBySize(int arraySize) {
out.println("arraySize: " + arraySize); // arraySize: 0
return new Integer[arraySize];
}
}
最佳答案
如果您查看 Collection.toArray
的实现您将看到的方法:
return toArray(generator.apply(0));
另一方面,您拥有的 IntFunction
的实现类似于:
new IntFunction<Integer[]>() {
@Override
public Integer[] apply(int arraySize) { // check the parameter here
return generateArrayBySize(arraySize);
}
}
因此传递给 generateArrayBySize
的值与传递给 IntFunction
的 apply
方法的值相同,即 0
。当然,将列表转换为数组的直接方法是:
var array = list.toArray(Integer[]::new);
关于java - Collection.toArray(IntFunction<T[]> generator) 不接收集合大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65567231/