当前位置: 首页 > 知识库问答 >
问题:

使用流[重复]将列表拆分为n个大小的较小列表

傅俊德
2023-03-14

如何使用流将Java列表拆分为Java大小为n的较小列表?

在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流来实现这一点,但我似乎不知道如何让它允许我使用数组列表

共有2个答案

郎翔
2023-03-14

很简单:

    List<Integer> list = List.of(1, 2, 3, 4, 5, 7, 8, 9, 10, 11);
    int n = 3;
    List<List<Integer>> result = new LinkedList<>();
    int size = list.size();
    for (int i = 0; i <= size; i += n) {
        result.add(list.subList(i, Math.min(i + n, size)));
    }        
    System.out.println(result);  // [[1, 2, 3], [4, 5, 7], [8, 9, 10], [11]]

Java 8解决方案:

List<Integer> list = List.of(1, 2, 3, 4, 5, 7, 8, 9, 10, 11);
int n = 3;
List<List<Integer>> result = IntStream.range(0, list.size())
    .filter(i -> i % n == 0)
    .mapToObj(i -> list.subList(i, Math.min(i + n, list.size())))
    .collect(Collectors.toList());
System.out.println(result);  // [[1, 2, 3], [4, 5, 7], [8, 9, 10], [11]]
袁博
2023-03-14

看起来您有一个JavaScript数组,因此等效的Java代码可能会使用IntStream。首先,计算正确的行数,然后使用数组。copyOfRange收集到列表,然后转换为int[]。最后,使用数组。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]]

对于<代码>列表

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);

对于相同(请求的)输出。

 类似资料:
  • 问题内容: 我有一个ArrayList,我想将其分成n个大小的较小列表,并对每个列表执行一个操作。我目前这样做的方法是 用Java中的ArrayLists实现(任何伪代码都可以) 其中A是列表,n是所需列表的大小 我认为在处理相当大的列表(最大为100万个)时,这种方法会花费太多时间,因此我试图找出哪种方法更有效。 问题答案: 您需要做一些利用List.subList(int,int)视图的事情,

  • 问题内容: 我正在寻找一种将python列表轻松分成两半的方法。 这样,如果我有一个数组: 我将能够得到: 问题答案: 如果需要功能:

  • 我有一个Pandas DataFrame列,其中包含一个列表中的多个列表。类似于这样: 我想将列表拆分为多列,因此输出应该是这样的: 请帮我做这件事。预先感谢

  • 我有个问题。我在enter中得到了一个csv,其值如下: 该文件的名称类似于:AB01_TEST_ABDC_YYYYMMDd.csv 我需要把它们放到一张地图上,就像: Bar是csv中一行的bean,Foo是由Bar的一些元素创建的bean 现在,我成功地通过CSV的第一列值将列表拆分为一个映射。这给了: 我是这样做的: baz必须被csv的第一列和每个第一列值的行的itération拆分。因为

  • 问题内容: 我的UL清单很长,我需要分解成较小的清单,每个清单包含约20个项目。 我以为我可以使用类似 但事实并非如此。知道如何以最少的CPU使用jQuery吗? 问题答案: 我将使用删除的s 创建文档片段,然后将其重新添加到所需的位置。在这种情况下,我将它们重新附加到主体上:

  • 我有一个非常简单的,其中每个单元格都包含一个列表。我想将列表中的每个元素拆分为它自己的列。我可以通过导出值,然后创建一个新的