java - Collection.toArray(IntFunction<T[]> generator) 不接收集合大小

标签 java lambda collections java-stream

为什么 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 的值与传递给 IntFunctionapply 方法的值相同,即 0。当然,将列表转换为数组的直接方法是:

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

关于java - Collection.toArray(IntFunction<T[]> generator) 不接收集合大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65567231/

相关文章:

c# - 如何从 List<T> 中获取第 n 个项目?

Java 8 : getting default values for a collection with nested Optionals

java - 在迭代数组列表时修改它

java - Jtwig获取参数显示

java - 将 espresso View 匹配器与 hamcrest 匹配器一起使用

java - 为什么这个简短的片段不适合多线程应用程序?

java - Java 中的消息传递延迟(使用 zeromq)

lambda - Java Lambda-检查要流的ArrayList是否为空

ruby-on-rails - 渲染异构集合: How can I specify a single directory for the partials?

java - 具有泛型类型具体实现的 LambdaMetaFactory