如何使用Java组合List中的元素而不重复

时间:2017-07-27 02:19:01

标签: java list

我正在尝试迭代并组合列表中的值。我的清单是[A,B,C,D]。我正在寻找输出以下内容的方法。

AB
AC
AD
BC
BD
CD 

这是我的代码:

List<String> list = new ArrayList<>();
    list.add("A");
    list.add("B");
    list.add("C");
    list.add("D");
      for (int i = 0; i<list.size()-1; i++){
         for (int k = 0; k<list.size()-1; k++){
             if (list.get(i)!=list.get(k+1)){
                System.out.println(list.get(i)+list.get(k+1));
               }
            }
         }

代码输出

AB
AC
AD
BC
BD
CB //Note this value: I already have BC -- and I consider BC==CB
CD

我不确定扫描仪是否可以选择...... 如果我在列表中有更多元素,它会变得更加混乱。列表中的更多项目意味着更多重复项,例如xx,yy,xy yx。

2 个答案:

答案 0 :(得分:2)

List<String> list = new ArrayList<>();
    list.add("A");
    list.add("B");
    list.add("C");
    list.add("D");
    for (int x = 0; x < list.size() - 1; x++){
        for (int y = x + 1; y < list.size; y++){
           System.out.println(list.get(x) + list.get(y);
        }
    }

内部循环应该从外部循环的索引+ 1开始,然后继续直到列表的末尾。假设您在list

中没有重复项,这将有效

同样要比较字符串,您需要使用.equals()==如果是两个不同的false个实例,则总是评估为String,即:

String a = "apple" //Same value but twi different String instances
String b = "apple"
System.out.println(a==b) // Prints false
System.out.println(a.equals(b)) Prints true

==运算符会比较对象引用而非,其中.equals()会比较两个对象。因此==将检查这两个对象是否引用相同的String实例。

答案 1 :(得分:0)

将第二个for循环更改为从i+1进行迭代。这应该给出所有的排列。这是改变的for循环:

      for (int i = 0; i < list.size() - 1; i++)
      {          
          for (int k = i+1; k < list.size(); k++)
          {
                System.out.println(list.get(i)+list.get(k));
          }
      }