【问题标题】:Partition of an Array List such that i can have fixed object in it?对数组列表进行分区,以便我可以在其中包含固定对象?
【发布时间】:2021-06-08 13:32:43
【问题描述】:

我希望将 N 个对象的 List 转换为 arraylist 块,它应该以这样的方式完成,它不应该有重复并且块应该有一定的大小。

示例- ArrayList 大小 - 100 块大小 20 Arraylist 应该有 5 个块。

【问题讨论】:

标签: java collections java-stream


【解决方案1】:

简单。遍历列表,每个“大小”元素创建一个新块:

public static <T> List<List<T>> split(Collection<T> data, int size)
{
    List<List<T>> lists=new ArrayList<>((data.size()+size-1)/size);
    List<T> list=new ArrayList<>(size);
    for(T t:data)
    {
        list.add(t);
        if(list.size()==size)
        {
            lists.add(list);
            list=new ArrayList<>(size);
        }
    }
    if(list.size()>0) lists.add(list);
    return lists;
}

【讨论】:

    【解决方案2】:

    你可以使用GuavaLists.partition(List list, int size)

    List<Integer> integers = Arrays.asList(1, 2, 3, 4, 5, 6, 7);
    List<List<Integer>> sublists = Lists.partition(integers, 3);
    System.out.println(sublists);
    

    输出:

    [
      [1, 2, 3],
      [4, 5, 6],
      [7]
    ]
    

    【讨论】:

    • 如果“没有重复”是指原始数组可能有重复 - 您可以事先删除重复,如下所示:noDuplicatesList= integers.stream().distinct().collect(Collectors.toList()); 然后调用 Lists.partition(noDuplicatesList, 3)
    【解决方案3】:

    有很多方法可以解决这个问题,我通过使用工作流程解决了这个问题,因为我想以一种我可以对其进行更多控制的方式执行列表分区,并且遵循 camunda 工作流程很有用。

    谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多