繁体   English   中英

比较 2 个列表与不同的 object java 返回不匹配的列表

[英]Compare 2 list with different object java return unmatched list

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

ArrayList 列表 = {a,b,c,d} 和列表 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));
    }

我不明白tagMap的用途。
我的解决方案用groups的交集(作为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));
        }
    }
}

List 和 ArrayList 是 Collection 框架的成员。 该列表是一个序列中元素的集合,其中每个元素是一个 object,元素通过其 position(索引)访问。 ArrayList 创建一个动态对象数组,可在需要时增加或减小大小。 List 和 ArrayList 之间的主要区别在于 List 是一个接口,而 ArrayList 是一个 class。

List 和 ArrayList 之间的主要区别

  • List 和 ArrayList 之间最重要的区别之一是 list 是一个接口,而 ArrayList 是一个标准集合 class。
  • List 接口扩展了 Collection 框架,而 ArrayList 扩展了 AbstractList Class 并实现了 List 接口。
  • List 接口 System.Collection.Generic 的命名空间,而 ArrayList 的命名空间是 System.Collection。
  • 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);  
        }  
        }  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM