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

比较2列表与不同的对象java返回不匹配的列表

穆英飙
2023-03-14

如何将2列表ArrayList与list进行比较

ArrayList={a,b,c,d}和list lst={a,b,c,d,e}

结果:列表al={e}

我应该如何处理这个问题?由于对象不同,比较器不工作,即使设置或其他操作也不工作

    List<String> al = null;
    Map<String, List<String>> tagMap = new HashMap<String, List<String>>();
    for (TkMGroup anotherTest : lst) {
        String id = anotherTest.getGrpCd();
        for (CsvGroup tag : list) {
            if (id.equals(tag.getGrpCd())) {
                if (tagMap.containsKey(id)) { // is this `id` already populated?
                    al = tagMap.get(id);
                } else { // No! Create a new List.
                    al = new ArrayList<String>();
                    tagMap.put(id, al);
                }
                // Add the tag to the List.
                al.add(tag.getGrpCd());
            } else {
                //              al.add(id);
            }
        }
    }
    for (int i = 0; i < al.size(); i++) {
        System.out.println(al.get(i));
    }

共有2个答案

闾丘康安
2023-03-14

List和ArrayList是集合框架的成员。列表是一个序列中元素的集合,其中每个元素都是一个对象,元素是通过它们的位置(索引)访问的。ArrayList创建一个对象的动态数组,在需要时可以增加或减少大小。List和ArrayList的主要区别在于List是一个接口,而ArrayList是一个类。

List和ArrayList的主要区别

  • List和ArrayList之间最重要的区别之一是List是一个接口,ArrayList是一个标准的集合类
  • 列表接口扩展了集合框架,而ArrayList扩展了AbstractList类并实现了ListInterface
  • 列表接口系统的名称空间。收集然而,ArrayList的命名空间是System。收藏
  • List接口创建一组元素,这些元素按顺序存储,并通过其索引号进行标识或访问
  • 另一方面,ArrayList创建一个对象数组,数组可以在需要时动态增长

范例-

        import java.util.*;  
        public class ComapreArraylistandList  
        {  
        public static void main(String args[])  
        {  
          
        ArrayList<String> al=new ArrayList<String>();   
        al.add("A");  
        al.add("B");  
        al.add("C");  
        al.add("D");  
        System.out.println(al);  
        
        List<String> sl=new ArrayList<String>();  
        sl.add("A");  
        sl.add("B");  
        sl.add("C");  
        sl.add("D");  
        System.out.println(sl);  
        
        //comparing both lists  
        boolean bval = al.equals(sl); //returns true because lists are equal  
        System.out.println(bval);  
        }  
        }  
潘琨
2023-03-14


我的解决方案用(提供为lst)和csvs(提供为list)的交集填充al

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

class TkMGroup {
    private String id;

    public TkMGroup(String id) {
        this.id = id;
    }

    public String getGrpCd() {
        return this.id;
    }
}

class CsvGroup {
    private String id;

    public CsvGroup(String id) {
        this.id = id;
    }

    public String getGrpCd() {
        return this.id;
    }
}

public class Main {
    public static void main(String[] args) {
        List<String> al = null;

        List<TkMGroup> groups = new ArrayList<>();
        groups.add(new TkMGroup("One"));
        groups.add(new TkMGroup("Two"));

        List<CsvGroup> csvs = new ArrayList<>();
        csvs.add(new CsvGroup("One"));
        csvs.add(new CsvGroup("Three"));

        // Get lists of Ids
        List<String> groupIds = groups.stream().map(TkMGroup::getGrpCd).collect(Collectors.toList());
        List<String> csvIds = csvs.stream().map(CsvGroup::getGrpCd).collect(Collectors.toList());
        // Filter intersection
        al = groupIds.stream().filter(csvIds::contains).collect(Collectors.toList());
        // Print the result
        for (int i = 0; i < al.size(); i++) {
            System.out.println(al.get(i));
        }
    }
}

编辑1:列出没有列出现有组的每个CSV。

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

class TkMGroup {
    private String id;

    public TkMGroup(String id) {
        this.id = id;
    }

    public String getGrpCd() {
        return this.id;
    }
}

class CsvGroup {
    private String id;

    public CsvGroup(String id) {
        this.id = id;
    }

    public String getGrpCd() {
        return this.id;
    }

    @Override
    public String toString() {
        return "CsvGroup{" +
                "id='" + id + '\'' +
                '}';
    }
}

public class Main {
    public static void main(String[] args) {
        List<CsvGroup> al = null;

        List<TkMGroup> groups = new ArrayList<>();
        groups.add(new TkMGroup("One"));
        groups.add(new TkMGroup("Two"));

        List<CsvGroup> csvs = new ArrayList<>();
        csvs.add(new CsvGroup("One"));
        csvs.add(new CsvGroup("Three"));

        // Get list of group's id
        List<String> groupIds = groups.stream().map(TkMGroup::getGrpCd).collect(Collectors.toList());

        // Filter out intersection
        al = csvs.stream().filter(csv -> ! groupIds.contains(csv.getGrpCd())).collect(Collectors.toList());
        // You need to access csv.getGrpCd() to check that the group is not already listed

        // Print the result
        for (int i = 0; i < al.size(); i++) {
            System.out.println(al.get(i));
        }
    }
}
 类似资料:
  • 问题内容: 我需要比较2个不同数据库中的数据库表,以了解差异所在,是否有一个简单的工具或脚本来实现? 问题答案: redgate SQL数据比较

  • 问题内容: 我有一个可能具有或不具有相同属性值的对象的列表/集合。获得具有相同属性的对象的不同列表的最简单方法是什么?一种收集类型最适合此目的吗?例如,在C#中,我可以使用LINQ执行以下操作。 我最初的想法是使用lambdaj(链接文本),但似乎不支持此功能。 问题答案: 使用接口的实现(类T可能需要自定义方法,您可能必须自己实现)。通常,a 是开箱即用的:它使用和方法比较对象。对于简单的对象,

  • 问题内容: 我得到的错误就在这行 。 该怎么办?其他逻辑还可以吗? 我想做的是有一个A列表和一个B列表,其中一个属性与id相同;尽管变量名不同。即在和在B。现在我将两个列表都放在ListAll中,并在相同的变量id / bid上对它们进行排序。我有A和B实现可比性。 和我的listAll是对象类型? 我该怎么做?谢谢。 问题答案: 您可以添加一个通用基类并在那里进行比较,如下所示:

  • 我有两个列表,数据相同,但顺序不同。 结果:

  • 问题内容: 我想获取两个列表并查找两个列表中都出现的值。 [5]例如,将返回。 问题答案: 使用,它快速且可读。

  • 问题内容: 我有两个列表 , 都包含 MyData 类型的对象,而 MyData* 包含这些变量。 利斯塔和数组listB都包含MyData的对象,现在我要两个列表的对象值比较这里 的名字 ,以及 检查 变量一样,如果 利斯塔 包含这些对象值 和ListB也包含 然后我必须比较列表并返回false,因为两个列表相同但是如果ListA包含 和 ListB 包含 然后我必须比较列表并返回true,因为