由方法生成的数组

时间:2015-06-27 14:44:04

标签: java arrays coding-style

如何通过方法生成指定长度的数组?

简而言之,这是代码的优雅替代品:

Result generate() {
    // logic
}

Result[] results(int length) {
    Result[] results = new Result[length];
    for (int i = 0; i < results.length; i++) results[i] = generate();
    return results;
}

1 个答案:

答案 0 :(得分:4)

自Java 8起而不是

('25', '50', '75')

你可以使用

for (int i = 0; i < results.length; i++) results[i] = generate();

您还可以删除显式生成Arrays.setAll(results, i -> generate()); 并让它由流

处理
new Result[length]

或可能更具可读性(但提及Brian Goetzworse parallel performancereturn IntStream.range(0, length).mapToObj(i->generate()).toArray(Result[]::new); 版本相比)

range

但请勿将return Stream.generate(this::generate).limit(length).toArray(Result[]::new); setAll(array, generator)方法混淆。 fill(array, element)将使用您传递的单个元素填充整个数组,而fill将使用生成器为数组中的每个索引生成新元素。

示例:

setAll

输出:

static AtomicInteger ai = new AtomicInteger();
static int generate() {
    return ai.incrementAndGet();
}

public static void main(String[] args) {

    int[] result = new int[10];
    Arrays.fill(result, generate());
    System.out.println(Arrays.toString(result));

    Arrays.setAll(result, i->generate());
    System.out.println(Arrays.toString(result));

}