collection.toarray(intfunction< t[]>generator)不接收集合大小

hgncfbus  于 2021-06-27  发布在  Java
关注(0)|答案(1)|浏览(236)

为什么? 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 };
    }
}
4xy9mtcn

4xy9mtcn1#

如果你看看 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 与传递给 apply 方法 IntFunction ,即。 0 . 当然,将列表转换为数组的直接方法是:

var array = list.toArray(Integer[]::new);

相关问题