Java7笛卡尔积versia没有重复

Java7 Cartesian Product versia without duplicates

假设我有 set<Integer>(几千)。 我想执行笛卡尔积但没有任何重复项。

重复的条目被认为在集合中具有逆元素(即 <1,3><3,1> 被认为是重复的)。

我怎样才能有效地做到这一点?

首先我使用 Sets.cartesianProduct(set, set) 得到 ~22M 元素,但它也包含重复项。再次迭代该列表以检查 result.contains(..) 根本没有效率。

有趣的是,我已经弄乱了几个小时,当我在 Whosebug 中写问题的那一刻,我突然自己想到了答案;)

根据@DmitryGorkovets 改进进行编辑

for (int i = 0; i < list.size(); i++) {
    for (int j = i+1; j < list.size(); j++) {
        result.add(new Pair<>(list.get(i), list.get(j)));
    }
}