如何获取 Java 列表并将其拆分为大小较小的列表 n
在Java中使用流?
在 JavaScript 中,我会使用 reduce()
函数并执行如下操作:
const n = 3;
const sublists = [1,2,3,4,5,6,7,8,9,0]
.reduce((r, i) => {
r[r.length - 1].length == n
? r.push([i])
: r[r.length - 1].push(i);
return r;
}, [[]]);
console.log(sublists);
我正在尝试使用 Java 流来做到这一点,但我似乎不知道如何让它让我使用 ArrayList<ArrayList<Integer>>
作为我的初始值,然后添加列表。我有点困惑组合器和累加器如何让我使用它们,或者即使 reduce()
是 Java 的最佳方法。
最佳答案
看起来您有一个 JavaScript 数组,因此等效的 Java 代码可能会使用 IntStream
。首先计算rows
的正确数量然后使用 Arrays.copyOfRange
收集到List
然后转换为 int[][]
。最后,使用Arrays.deepToString
打印数组。就像,
final int n = 3;
int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
int rows = 1 + arr.length / n;
int[][] sublists = IntStream.range(0, rows)
.mapToObj(i ->
Arrays.copyOfRange(arr, n * i, Math.min(n + (n * i), arr.length)))
.collect(Collectors.toList()).toArray(new int[rows][n]);
System.out.println(Arrays.deepToString(sublists));
哪些输出
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [0]]
对于List<Integer>
可能会这样做
final int n = 3;
List<Integer> arr = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 0);
int rows = 1 + arr.size() / n;
List<List<Integer>> sublists = IntStream.range(0, rows)
.mapToObj(i -> arr.subList(n * i, Math.min(n + (n * i), arr.size())))
.collect(Collectors.toList());
System.out.println(sublists);
对于相同的(请求的)输出。
关于java - 使用流将列表拆分为 n 大小的较小列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47638892/