如何将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));
}
List和ArrayList是集合框架的成员。列表是一个序列中元素的集合,其中每个元素都是一个对象,元素是通过它们的位置(索引)访问的。ArrayList创建一个对象的动态数组,在需要时可以增加或减少大小。List和ArrayList的主要区别在于List是一个接口,而ArrayList是一个类。
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);
}
}
我的解决方案用组
(提供为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,因为