当前位置: 首页 > 知识库问答 >
问题:

是否有一种算法可以删除与另一个元素相同的元素?

韩博厚
2023-03-14

我想删除一些与其他输出值相同的输出!因为Test1=Test2=Test5=Test6,所以我希望它在控制台上只显示Test1!Test3=Test4=Test7=Test8,所以我希望它只显示Test3。。。。。。。。

以下代码是我所做的:

    boolean flg1 = true;
    List<List<String>> tmp1 = new ArrayList <>();
    List<List<String>> tmp2 = new ArrayList <>();
    System.out.println();
    System.out.println("Size of the subset: " + subset.size());
    for(int i=0; i< subset.size();i++){
        tmp1=subset.get(i);

        // System.out.println("TMP1:"+ tmp1);

        for(int j=0; j<subset.size();j++){
        tmp2=subset.get(j);

        // System.out.println("TMP2:"+ tmp2.get(1));

            if(i != j && !compareOuterlist(tmp1,tmp2)){
                flg1=true;
                continue;
            }
        }
        if(flg1){
            count++;
            System.out.println("TEST " + (i+1) + ":"+ tmp1);
        }
    }

    System.out.println();
    System.out.println("Total partition:"+ count);
}
public static boolean compareOuterlist(List<List<String>> p1, List<List<String>> p2){
    if(p1.size() != p2.size()){
        return false;
    }
    for(int i = 0;i < p1.size();i++){
        if(!(compareInnerlist1(p1.get(i),p2.get(i)))){
            return false;
        }
    }
    return true;
}

public static boolean compareInnerlist1(List<String> p1, List<String> p2){
    for(int i=0;i<p1.size();i++){
        if(!(p1.equals(p2))){
            return false;
        }
    }
    return true;
}

以下是我的输出:

TEST 1:[[P11, X11, X22], [P11, X11, X22]]
TEST 2:[[P11, X11, X22], [P11, X11, X22]]
TEST 3:[[X11, X22], [P11, X22], [P11, X11]]
TEST 4:[[X11, X22], [P11, X22], [P11, X11]]
TEST 5:[[P11, X11, X22], [P11, X11, X22]]
TEST 6:[[P11, X11, X22], [P11, X11, X22]]
TEST 7:[[X11, X22], [P11, X22], [P11, X11]]
TEST 8:[[X11, X22], [P11, X22], [P11, X11]]
TEST 9:[[P11, X22], [X11, X22], [P11, X11]]
TEST 10:[[P11, X22], [X11, X22], [P11, X11]]
TEST 11:[[P11, X22], [X11, X22], [P11, X11]]
TEST 12:[[P11, X22], [X11, X22], [P11, X11]]

共有2个答案

钱志
2023-03-14

只要您想打印测试,您就可以创建字符串an的ArrayList,将结果添加到该列表中,但在打印和递增计数之前,您必须确保要打印的内容不存在于列表中:

if(flg1){
        if !(Your_List.conatains("TEST " + (i+1) + ":"+ tmp1)) {
             System.out.println("TEST " + (i+1) + ":"+ tmp1);
             count++;
        }
        Your_List.add("TEST " + (i+1) + ":"+ tmp1);
    }
胡玉书
2023-03-14

使用Java8 Streams,您可以使用准确度()来完成:

List<List<List<String>>> result = subset.stream().distinct().collect(Collectors.toList());

如果您想在打印时循环执行,可以使用Set完成:

Set<List<List<String>>> distinct = new HashSet<>();
for (int i = 0; i < subset.size(); i++) {
    List<List<String>> tmp1 = subset.get(i);
    if (distinct.add(tmp1))
        System.out.println("TEST " + (i+1) + ":"+ tmp1);
}
System.out.println();
System.out.println("Total partition: " + distinct.size());

输出

TEST 1:[[P11, X11, X22], [P11, X11, X22]]
TEST 3:[[X11, X22], [P11, X22], [P11, X11]]
TEST 9:[[P11, X22], [X11, X22], [P11, X11]]

Total partition: 3
 类似资料:
  • 我想用Java做一个小游戏swing,但我想不出一个解决问题的好方法。我有两个阵列,第一个是板条箱 第二个是Tile对象。 我想检查一下是否所有的板条箱都放在瓷砖上。我的意思是,不管哪个盒子在哪个瓷砖上,都有几个盒子,几个瓷砖,每个盒子都应该放在一块瓷砖上,不管哪个盒子在哪个瓷砖上。在游戏中,玩家行走并移动箱子,所以他们的坐标会发生变化。瓷砖坐标不变(如果可能有帮助的话)。这将是我的停止状态。当板

  • 问题内容: 我一直在寻找一种操作类似于的方法,但忽略了元素顺序。我在Google Collections(类似,但确实能说明订购)和JUnit(显然只是调用Collection,这取决于Collection的实现,而这并不是我想要的)中都找不到。如果此方法采用s 是最好的,但是我也可以简单地采用s。这样的方法当然会考虑集合中的所有重复元素(因此不能简单地测试)。 请注意,我并不是在问如何实现这样的

  • 问题内容: 同一元素是否可以有多个伪元素? 我正在尝试使用jQuery将上述样式应用于相同的元素,但仅应用了最新样式,从未应用过这两种样式。 问题答案: 在CSS2.1中,一个元素在任何时候最多只能具有任何一种伪元素。(这意味着一个元素可以同时具有a 和一个伪元素- 每种元素不能超过一个。) 结果,当您有多个匹配同一元素的规则时,它们将全部层叠并应用于单个伪元素,就像普通元素一样。在您的示例中,最

  • 问题内容: 上面显示了以下错误: 因此,我必须这样做: 但是,没有简单的方法可以做到这一点吗? 问题答案: 要删除列表中元素的首次出现,只需使用: 请注意,它不会删除所有出现的元素。为此使用列表理解。

  • 问题内容: 我正在寻找一种有效的方法来从javascript数组中删除所有元素(如果它们存在于另一个数组中)。 我想对myArray进行操作以使其保持这种状态: 使用jQuery,我使用和,效果很好: 有没有一种纯Javascript方式无需循环和拼接的方法? 问题答案: 使用方法: 小改进,因为对浏览器的支持增加了: 使用arrow functions:下一个适应:

  • 我正在寻找一种有效的方法,从一个javascript数组中删除所有元素,如果它们存在于另一个数组中。 我想对myArray进行操作,使其保持这种状态: 使用jQuery,我使用和,效果很好: 有没有一种纯javascript的方法可以做到这一点,而不需要循环和拼接?