gpt4 book ai didi

java - 从相同对象的两个列表中仅查找不匹配的 ID

转载 作者:行者123 更新时间:2023-11-30 10:01:16 26 4
gpt4 key购买 nike

我需要从两个不匹配 id 的对象列表创建一个 id 列表

我可以用旧方法来做,但希望使用 java 8 来完成

这就是我所做的并且有效。 (为上下文提供此内容的实际代码)

private List<String> getCartItemAttributesIds(List<CartItemAttribute> existingAttributes, List<CartItemAttribute> requestingAttributes) {
List<String> attributeIdsNeededtoDeleted = new ArrayList<>();
boolean flag = true;
for(CartItemAttribute existingAttribute: existingAttributes) {
flag = true;
for(CartItemAttribute requestingAttribute:requestingAttributes) {
if(StringUtils.isBlank(requestingAttribute.getCartItemAttributeId())) {
flag = false;
break;

} else if (requestingAttribute.getCartItemAttributeId().equals(existingAttribute.getCartItemAttributeId())) {
flag = false;
break;
}
}
if(flag) {
attributeIdsNeededtoDeleted.add(existingAttribute.getCartItemAttributeId());
}
}

System.out.println("*********************************");
for (String var: attributeIdsNeededtoDeleted) {
System.out.println("[" +var +"]");
}

return attributeIdsNeededtoDeleted;

}
class Person {
String id ;
String name;
String age;
}
p1:{1,test1,3}
p11:{12,test4,9} <----
p2:{2,test2,6}
p3:{6,test3,8} <----
p4:{1,test1,33}
p5:{2,test22,16}
p6:{3,test3,18}
p10:{null,test10,8}

List<Person> list1 = {p1,p2, p3,p11};
List<Person> list2 = {p4,p5, p6, p10};

结果

list<string> results = {"p11","p3"}

对结果的详细解释:

p1:{1,test1,3}
p4:{1,test1,33}
p2:{2,test2,6}
p5:{2,test22,16}

p1 和 p4,p2 和 p5

他们的 id 匹配,即使数据不匹配,但我不希望结果中有这个 id

p6:{3,test3,18}
p10:{null,test10,8}

p6 和 p10 不匹配,但它们都在列表 2 中,因此不希望它们出现在我的结果列表中。

p11:{12,test4,9} <----
p3:{6,test3,8} <----

p11 和 p3。 ID 在列表 1 中而不在列表 2 中,因此它们不匹配,应该在结果列表中。

我想使用流。并且模型哈希码包含所有字段,“包含”或“设置”会认为它们是不同的对象。但就我的目的而言,只有没有匹配的 ID 才会有所不同。

最佳答案

如果您不想按照建议使用Set 类,您可以这样做。我向 Person 类以及 equalshashCode 实现添加了一个额外的字段。但是你现在所做的并没有错。恕我直言,streams 是为了让您的编码更轻松,而不是将特定的实现技术强加给您。


public static void main(String[] args) {
Person p1 = new Person("1", "test1", "3", "p1");
Person p11 = new Person("12", "test4", "9", "p11");
Person p2 = new Person("2", "test2", "6", "p2");
Person p3 = new Person("6", "test3", "8", "p3");
Person p4 = new Person("1", "test1", "33", "p4");
Person p5 = new Person("2", "test22", "16", "p5");
Person p6 = new Person("3", "test3", "18", "p6");
Person p10 = new Person(null, "test10", "8", "p10");

List<Person> list1 = Arrays.asList(p1, p2, p3, p11);
List<Person> list2 = Arrays.asList(p4, p5, p6, p10);

List<Person> result =
list1.stream().filter(n -> !list2.contains(n)).collect(
Collectors.toList());
System.out.println(result);

}

}

class Person {
String id;
String name;
String age;
String fieldName;

public int hashCode() {
return id.hashCode();
}
public boolean equals(Object ob) {
if (ob == this) {
return true;
}
if (!(ob instanceof Person)) {
return false;
}

Person p = (Person) ob;
if (p.id == null && id == null) {
return true;
}
if (p.id == null || id == null) {
return false;
}
return id.equals(p.id);
}
public Person(String id, String name, String age, String fieldName) {
this.id = id;
this.name = name;
this.age = age;
this.fieldName = fieldName;
}
public String toString() {
return fieldName;
}
}

为了完成,这里是评论中提到的 Set 解决方案。


Set<Person> set1 = new HashSet<>(list1);
set1.removeAll(list2);
System.out.println(set1);

关于java - 从相同对象的两个列表中仅查找不匹配的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57528189/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com