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

如何将一个列表分配到子列表中,同时保持元素的原始顺序?

夹谷承安
2023-03-14

如何将列表拆分为给定数量的列表,按顺序获取元素并将它们分发到子列表(因此不对列表进行分区)?

我想尽可能“好”地做到这一点(使用 Java 8 功能或 Guava 或类似的东西。

  • 示例列表:[1 2 3 4 5 6 7]
  • 应分为3部分:[1 4 7][25][3]
  • 应分为2部分:[1 3 5 7][2 4 6]

共有2个答案

姜智渊
2023-03-14

像这样的东西可以把你所有的列表放到一个映射中,然后你只需要把子列表从映射中取出来

int count = 0;
Map<Integer, List<Integer>> mapLists = list.stream()
                            .peek(i -> count ++)
                            .collect(Collectors.groupingBy(i -> count % numOfSubLists))

另一种使用番石榴的方法

https://google.github.io/guava/releases/snapshot/api/docs/com/google/common/collect/Lists.html#partition(java.util.List, int)

List<List<Integer>> lists = Lists.partition(list, noOfPartitions);
吴欣悦
2023-03-14

如果源列表支持高效的随机访问,就像ArrayList一样,您可以使用

IntStream.range(0, source.size()).boxed()
  .collect(groupingBy(i->i%listCount, LinkedHashMap::new, mapping(source::get, toList())));

e. g. g.

List<Integer> source=IntStream.range(0, 20).boxed().collect(toList());
System.out.println(source);
int listCount=5;

Map<Integer, List<Integer>> collect = IntStream.range(0, source.size()).boxed()
  .collect(groupingBy(i->i%listCount, LinkedHashMap::new, mapping(source::get, toList())));
// in case it really has to be a List:
List<List<Integer>> result=new ArrayList<>(collect.values());

result.forEach(System.out::println);
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
[0, 5, 10, 15]
[1, 6, 11, 16]
[2, 7, 12, 17]
[3, 8, 13, 18]
[4, 9, 14, 19]
 类似资料:
  • 问题内容: 如何将一个列表拆分为给定数量的列表,按顺序排列元素并将它们分配给子列表(因此不对列表进行分区)? 我想尽可能做到“不错”(使用Java 8功能或Guava或类似功能)。 示例列表: 应该分为3: 应该分成2个: 问题答案: 如果源列表支持有效的随机访问,则可以使用 例如

  • 长话短说,我在掷不公平的骰子,并试图在x个骰子数之后找到任何给定和的概率。实际上有数百张脸和数百个卷轴,所以我不能简单地找到所有可能的组合,然后找到概率,列出大小和内存限制。 我通过寻找所有可能的组合以及它们一次发生一次滚动的概率来解决这个问题。在我找到所有可能的组合和每个组合的概率后,我需要通过将组合的概率与相同的总和相结合来压缩它。 想想组合(1,3)和(2,2)都是唯一的组合,但是它们都有4

  • 我有一个数字列表L。还有另一个数字列表M。我需要返回一个在L和M中找到的数字列表L。 编辑:从数学上讲,我正在寻找多集交点。 例子: L=3,,4,,5,,,6 M=,7,,,,1 L'=9,1,2,1 我为此编写了以下代码: 虽然它达到了目的,但我想知道是否有一种惯用的Perl6方法可以做到这一点? 一些背景:我一直在尝试一起学习Perl6和Python,并用这两种语言解决相同的难题。Pytho

  • 问题内容: 我有两个看起来像的清单: 我要做的是将list1的所有那些元素都保留在list2中。结果应该是: 问题答案: 使用运算符,您可以检查元素是否在序列中。 使用列表理解: 但是效率不高。您最好转换为对象。

  • 问题内容: 我有这个清单(): 我想要这样的东西: 换句话说,我想使用值作为分隔符将列表拆分为子列表,以获得列表列表()。我正在寻找Java 8解决方案。我已经尝试过,但是我不确定这是我要找的东西。谢谢! 问题答案: 我目前想出的唯一解决方案是实现自己的自定义收集器。 在阅读解决方案之前,我想添加一些有关此的注释。我将这个问题更多地当作编程练习,我不确定是否可以使用并行流来完成。 因此,您必须意识

  • 问题内容: 我有一个哈希表。values()方法以与插入顺序不同的顺序返回值。如何获得与插入顺序相同的值?使用LinkedHashmap是一种替代方法,但不同步。 问题答案: 使用。 接口的哈希表和链表的实现,具有可预测的迭代顺序。此实现的不同之处在于,它维护一个遍历其所有条目的双向链接列表。此链表定义了迭代顺序,通常是将键插入映射中 的顺序 ( insert-order )。请注意,如果将密钥