java - 迭代所有唯一的二元素组合

标签 java guava

我需要迭代两个元素的所有组合:在集合 [1,2,3,4] 中,我想迭代 [(1,2),(1,3),(1,4), (2,3),(2,4),(3,4)]。有现成的工具可以做到这一点吗?

// Not what I need, works wrong!
for (Object o1 : set) {
  for (Object o2 : set) {
    if (o1 == o2) continue;
    ...
  }
}

此代码将执行比所需操作多两倍的操作,因为每个对象都会在两个循环中被访问。

为此编写自己的方法很简单,我只是不想发明轮子。我希望在 Guava 或 Collections API 中找到这个功能,但没有找到这样的功能。

最佳答案

https://code.google.com/p/combinatoricslib/ 简单组合部分说明了该实用程序的用法。 与 2 个元素的组合将产生您想要的结果。

    // Create the initial vector
    ICombinatoricsVector<String> initialVector = Factory.createVector(
      new String[] { "red", "black", "white", "green", "blue" } );

   // Create a simple combination generator to generate 3-combinations of the initial vector
   Generator<String> gen = Factory.createSimpleCombinationGenerator(initialVector, 3);

   // Print all possible combinations
   for (ICombinatoricsVector<String> combination : gen) {
      System.out.println(combination);
   }

关于java - 迭代所有唯一的二元素组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23562297/

相关文章:

java - 分割长行并缩进并输出

java - 为什么我的算法有 O(1) 额外的空间复杂度?

java - Spock Mock 与 Guava Collection

java - Guava/Voldemort/MySQL 刷新到数据库问题

java - Java 客户端尝试连接到 Elastic Search 时出错

java - Guava LoadingCache 每次都为同一个键加载新值

java - java 中的 Android Activity 与 XML 崩溃

Java:如何使用 ServerSocket 和 Socket 正确关闭套接字连接

java - 从下拉列表中的数据库检索值(<s :select>) using Struts 2 and Hibernate

java - 将 Map 转换为 ImmutableSetMultimap