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

成语的成对迭代通过排序的集合

宗项禹
2023-03-14
问题内容

是否存在Java惯用法来通过sorted的元素进行成对迭代Collection?我的意思是,每次迭代都可以访问集合的一个元素和集合的下一个元素吗?

对于排序的Lists(和数组),可以使用集合中的索引来完成:

 final int n = list.size();
 assert 2 <= n;
 for (int i = 0; i < n - 1; ++i) {
    final Thing thing1 = list.get(i);
    final Thing thing2 = list.get(i+1);
    operateOnAdjacentPair(thing1, thing2);
 }

但是那又如何SortedSet呢?(因为SortedMap您可以使用entrySet(),它等同于SortedSet大小写)。

因此,例如,如果您的排序集包含值{1、2、3、4},则迭代将按该顺序针对(1、2),(2、3),(3、4)对。


问题答案:

您可以通过以下方式简单地实现它(并将类似的策略应用于其他集合):

Iterator<Thing> iter = set.iterator();
Thing previous = iter.hasNext() ? iter.next() : null;
while (iter.hasNext()) {
    final Thing current = iter.next();
    operateOnAdjacentPair(previous, current);
    previous = current;
}


 类似资料:
  • 问题 你有一系列排序序列,想将它们合并后得到一个排序序列并在上面迭代遍历。 解决方案 heapq.merge() 函数可以帮你解决这个问题。比如: >>> import heapq >>> a = [1, 4, 7, 10] >>> b = [2, 5, 6, 11] >>> for c in heapq.merge(a, b): ... print(c) ... 1 2 4 5 6 7

  • 我正在研究一个扑克牌洗牌的问题,并找到了两个解决方案。 目标是将存储在阵列中的所有52张扑克牌作为卡对象进行洗牌。卡类具有与其关联的id和名称。 现在,一种方法是使用for循环迭代,然后在临时卡对象持有者和随机数生成器的帮助下,我们可以交换两个对象。这一直持续到我们到达一半的卡片。 另一种方法是使用随机生成器编号实现可比较的覆盖比较方法,因此每次调用该方法时都会得到随机响应。 你觉得哪条路更好?

  • 问题内容: 假设我们有一个迭代器(一个无限的迭代器)返回列表(或有限迭代器),例如一个由 获得一个迭代器(显然是无限的)是一个好的Python习惯用法,该迭代器将从第一个迭代器返回每个元素,然后从第二个迭代器返回每个元素,依此类推。在上面的示例中它将返回。迭代器是无限的,因此将无法使用。 有关 在python中展平浅表 问题答案: 从Python 2.6开始,您可以使用: 您也可以使用嵌套的生成器

  • 我想按日期的月份排序,这是通过合并从HiberNate查询输出得到的2个列表形成的,但问题是最终的不能转换为我的项目的任何特定的用户定义类。 我想让arraylist按月排序。 提前谢谢

  • 生成器迭代 手动迭代生成器,递归执行 AsyncTask::next,调用Generator::send方法将将yield值作为yield表达式结果。 yield表达式可能是一个异步调用,我们这里为之后把异步调用的结果作为yield表达式结果铺垫。 yield外侧括号在PHP5必须,PHP7不需要。 如, $ip = (yield async_dns_lookup(...) ); ^

  • 问题内容: 我有一个这样的对象: 我需要在HTML表中获取ID和名称,但是似乎很难遍历此对象。TIA。我知道我需要先到达“值数组”,然后再到达“组”对象,但是我要遍历对象和数组之间的过渡以及foreach与基于索引的迭代。 例如,我尝试了这个: 它遍历对象,但也给我没用 问题答案: