当前位置: 首页 > 面试题库 >

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

孟建木
2023-03-14
问题内容

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

我想尽可能做到“不错”(使用Java 8功能或Guava或类似功能)。

  • 示例列表: [1 2 3 4 5 6 7]
  • 应该分为3: [1 4 7] [2 5] [3 6]
  • 应该分成2个: [1 3 5 7] [2 4 6]

问题答案:

如果源列表支持有效的随机访问,ArrayList则可以使用

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

例如

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

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

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

  • 问题内容: 我注意到JSON对象中元素的顺序不是原始顺序。 JSON列表的元素呢?他们的订单得到维护吗? 问题答案: 是的,JSON数组中元素的顺序得以保留。从RFC 7159开始-JavaScript对象表示法(JSON)数据交换格式 (重点是我的): 对象是零个或多个名称/值对的 无序 集合,其中名称是字符串,值是字符串,数字,布尔值,null,对象或数组。 数组是零个或多个值的 有序 序列。

  • 问题内容: 我的问题是我想在遍历新元素的同时扩展一个包含新元素的列表,并且希望迭代器继续刚才添加的元素。 根据我的理解,会在列表中的当前元素之前而不是之后添加一个元素。是否可以通过其他方式实现这一目标? 问题答案: 除了以外,您无法在修改集合时使用进行迭代。 但是,如果使用方法,该方法返回,并对其进行迭代,则您还有更多要修改的选项。从javadoc中获取: 新元素插入到隐式光标之前:…后续调用将返