如何通过方法生成指定长度的数组?
简而言之,这是代码的优雅替代品:
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;
}
答案 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 Goetz:worse parallel performance与return 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));
}