java 。如何从两个列表中删除重复的对象

标签 java list object duplicates

第二个问题,继续第一个问题。 我有两个字符串列表。有一个字符串列表 (asu) - M1、M2、M3 ... 以及一个字符串列表 (rzs) - M1、M2、M3 及其所有可能的组合。需要为每个元素(asu)(例如M1)找到(rzs)中的一个元素(M1,M1M2,..),其中包含(例如M1)。示例:从 (asu) 获取 M1 并将开始在 (rzs) 中搜索重复项(包含)。我们在 (rzs) 中找到了 M1M2,它包含了 M1。之后我们应该从列表中删除这两个元素。非常感谢 No Idea For Name 帮助修改了这段代码。但是程序总是失败,因为 AbstractList.remove 错误。请帮助实现逻辑和调整代码!

Imports..........
        public class work{
        List<string> asu = Arrays.asList("M1","M1","M1","M3","M4","M5","M1","M1","M1","M4","M5","M5");
        List<string> rzs = Arrays.asList("M1","M2","M3","M4","M5",
        "M1M2","M1M3","M1M4","M1M5","M2M3","M2M4","M2M5","M3M4","M3M5","M4M5"
        ,"M1M2M3","M1M2M4","M1M2M5","M1M3M4","M1M3M4","M1M4M5","M2M4","M2M5");

        public static void main(String[] args) {
        work bebebe = new work();
        bebebe.mywork();
        }

        List<string> tmp1 = new ArrayList<string>();  
        List<string> tmp2 = new ArrayList<string>();  
           System.out.println(Arrays.deepToString(rzs));
           System.out.println(Arrays.deepToString(asu));
           for (string curr : asu){
             for (string currRzs : rzs){
               System.out.println("New iteration ");
               if (currRzs.contains(curr)) {
                  System.out.println("Element ("+curr+") in ASU =
                                    element ("+currRzs+") in RZS");
                  if(tmp1.contains(curr) == false)
                     tmp1.add(curr);

                  if(tmp2.contains(currRzs) == false)
                     tmp2.add(currRzs);
               }
              } 
            }

           for (string curr : tmp1){
              asu.remove(curr);
           }

           for (string currRzs : tmp2){
              rzs.remove(currRzs);
           }

最佳答案

您应该尝试使用 Collection 的 removeAll() 或 retainAll() 方法。

例如:

List<String> aList = new ArrayList<String>();
aList.add("a");
aList.add("b");
aList.add("c");
aList.add("d");
aList.add("e");

List<String> bList = new ArrayList<String>();
bList.add("b");
bList.add("e");
bList.add("d");

aList.removeAll(bList);

会给你aList中剩下的“a”和“c”元素

如果你尝试使用 retainAll() 方法:

aList.retainAll(bList);

将为您提供 aList 中剩余的“b”、“d”和“e”元素;

retainAll()用于删除调用集合中不属于给定集合的所有元素。

removeAll()用于从另一个集合中删除一个集合的所有元素。

因此,这完全取决于您的用例。

编辑

如果在任何情况下你想在有条件地迭代时从这些集合中删除一些元素,那么你应该首先获得 Iterator<Type>然后调用remove()方法。

喜欢:

while(iterator.hasNext()){
    String str = iterator.next();

    if(str.equals('test')){
        iterator.remove();
    }
}

关于 java 。如何从两个列表中删除重复的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18056297/

相关文章:

c# - List<T>.Where Where 不会出现在智能感知中

Javascript/Chrome - 如何从 webkit 检查器复制对象作为代码

java - 问题跟踪程序 - ArrayList 中的对象

java - Hibernate 聚合 + Spring MVC

java - 获取spring web flow中之前执行过的状态的id

java - 从主类访问辅助类的成员方法(netbeans 的 swing 编辑器)

java - 如何将字节数组中的pcm样本转换为-1.0到1.0范围内的 float 并返回?

python - 如何将 pandas 系列的列值转换为 Python 列表?

list - 查找每个数字在列表中出现的次数

c# - 对象字典不适用于 JSON