Java 我应该如何获得两个列表之间的差异<;对象>;

Java 我应该如何获得两个列表之间的差异<;对象>;,java,spring-boot,Java,Spring Boot,有两个不同大小和对象的实体列表,例如列表baseEntityList和列表subEntityList,现在我想得到的结果是存储在baseEntityList而不是subEntityList中,不同的维度是brandName。我已经覆盖了equals方法,但它不起作用。这是我的密码 Main.class: findDifferenceList(baseEntityList, subEntityList) Method: private <T> List<T> fin

有两个不同大小和对象的实体列表,例如
列表baseEntityList
列表subEntityList
,现在我想得到的结果是存储在baseEntityList而不是subEntityList中,不同的维度是brandName。我已经覆盖了equals方法,但它不起作用。这是我的密码

Main.class: 
  findDifferenceList(baseEntityList, subEntityList)
Method:

private <T> List<T> findDifferenceList(List<T> baseBrandList, List<T> subBrandList) {
return baseBrandList.stream().filter(item -> !subBrandList.contains(item)).collect(toList());
列表查找差异列表(列表1、列表2){
返回list1.stream().filter(i->!list2.contains(i))
.concat(list2.stream.filter(i->!list1.contains(i))
.collect(Collectors.toList());
}
你需要做你在两个方向上所做的;)。什么不在A和B中,什么不在B和A中。

列表查找差异列表(列表1,列表2){
返回list1.stream().filter(i->!list2.contains(i))
.concat(list2.stream.filter(i->!list1.contains(i))
.collect(Collectors.toList());
}

你需要做你在两个方向上所做的;)。什么不在A和B中,什么不在B和A中。

这是一些棘手的代码,如果我想这样做,我将从
baseEntityList
中删除所有
subEntityList

或者,如果您想在两个列表中找到不同之处,您可以同时为这两个列表执行此操作

var diffWithBase = subEntityList.removeAll(baseEntityList);
var diffWithSubList = baseEntityList.removeAll(subEntityList);
// print 


这是一些棘手的代码,如果我想这样做,我将从
baseEntityList
中删除所有
subEntityList

或者,如果您想在两个列表中找到不同之处,您可以同时为这两个列表执行此操作

var diffWithBase = subEntityList.removeAll(baseEntityList);
var diffWithSubList = baseEntityList.removeAll(subEntityList);
// print 


你可以试试老式的Java方式

List<BrandEntity> diff = new ArrayList<>(baseEntityList);
difference.removeAll(subEntityList);
return diff;
List diff=新的ArrayList(baseEntityList);
差异。删除所有(子实体列表);
返回差;

你可以试试老式的Java方式

List<BrandEntity> diff = new ArrayList<>(baseEntityList);
difference.removeAll(subEntityList);
return diff;
List diff=新的ArrayList(baseEntityList);
差异。删除所有(子实体列表);
返回差;

您所做的是根据字符串的引用相等性来比较字符串,如下面的对象所示。但是您需要比较它们的值相等性,比如
brandName.equals(that.brandName)

尽管如此,我还是宁愿使用现有的库来比较列表,比如Apache的commons
CollectionUtils

CollectionUtils.removeAll(List<T> baseBrandList, List<T> subBrandList);
CollectionUtils.removeAll(列出基本品牌列表,列出子品牌列表);

您所做的是根据字符串的引用相等性来比较字符串,如下面的对象所示。但是您需要比较它们的值相等性,比如
brandName.equals(that.brandName)

尽管如此,我还是宁愿使用现有的库来比较列表,比如Apache的commons
CollectionUtils

CollectionUtils.removeAll(List<T> baseBrandList, List<T> subBrandList);
CollectionUtils.removeAll(列出基本品牌列表,列出子品牌列表);


根据该方法,如果我的列表是{}和{A,B},则差异是{},即无。有点奇怪的代码看起来不错。您使用了什么作为测试数据?@Michael此方法不计算双向差异。它只返回列表1中不在列表2中的元素need@SergeHarnyk是的,你只要重新表述一下我说的话。根据这个方法,如果我的列表是{}和{A,B},那么区别是{},即没有。有点奇怪的代码看起来不错。您使用了什么作为测试数据?@Michael此方法不计算双向差异。它只返回列表1中不在列表2中的元素need@SergeHarnyk是的,你只需要重新表述我说的话。尝试过了,仍然无法工作,有线的事情是this.brandName总是空的,但是当我调试时,在equals方法中,this.brandName值是正确的it@ZhangXin也许JSON反序列化有一些问题?你能显示你的数据吗?谢谢,已经完成了,equals方法引起的问题已经尝试过了,仍然无法工作,连线的事情是this.brandName总是空的,但是当我调试时equals方法中的this.brandName值是正确的it@ZhangXin也许JSON反序列化有一些问题?你能显示你的数据吗?谢谢,已经完成了,equals methodnope引起的问题,我只想让元素只存储在list1而不存储在List2,当baseBrandList为{}且subBrandList为{A,B}时,你期望什么?不,我只想让元素只存储在list1而不存储在List2,当baseBrandList为{}时,你期望什么子品牌列表{A,B}?你是对的,它是由等于字符串值引起的,我只是通过IntelljIdea生成方法,实际上需要修改它你是对的,它是由等于字符串值引起的,我只是通过IntelljIdea生成方法,实际上需要修改它