如何在没有迭代器的情况下迭代时从集合中删除元素

时间:2013-10-06 17:49:06

标签: java collections guava

假设我有一个字符串列表(简化)

fullList = {a,b,c,d,a,d,c,b}

我希望找到像

这样的情侣

couplesList = {{a,a},{b,b}, ...}

目前我正在接近这个问题的方式是

  1. 获取第一个元素
  2. 使用guava谓词找到合适的对象
  3. 现在怎么办?
  4. 我最终有2个对象{a,a},但是我无法从fullList中删除它们,因为我没有使用迭代的“迭代器”样式(因为我使用的是番石榴谓词它无论如何都行不通 - 因为我没有迭代器指向Itarables.find(...)函数找到的元素的指针。

    我也想以“高效”的方式做到这一点,所以我想避免多个嵌套循环等。

    任何想法如何更正确/有效地解决这个问题?我有点卡住了。

1 个答案:

答案 0 :(得分:6)

我会为每个元素创建一个频率计数。在番石榴术语中,这是一个MultiSet。从那里你可以创建一对对的集合,以及另一个单打的集合。这可以通过原始列表的一次传递和频率计数图的一次传递来完成。即O(n)