[英]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 之间的主要区别
例子-
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.