Java 使用一个对象属性比较两个对象列表
我有两个需要比较的对象列表。这些对象的名称为atribute,我想检查另一个列表中是否存在一个具有该名称的对象 我遇到过ListUtils.subtract方法,但我只见过有人将其与Int或String等类型一起使用 它可以与自定义对象类型一起使用吗 编辑: 我有两个此对象类型的列表:Java 使用一个对象属性比较两个对象列表,java,Java,我有两个需要比较的对象列表。这些对象的名称为atribute,我想检查另一个列表中是否存在一个具有该名称的对象 我遇到过ListUtils.subtract方法,但我只见过有人将其与Int或String等类型一起使用 它可以与自定义对象类型一起使用吗 编辑: 我有两个此对象类型的列表: List<MyClass> list1; List<MyClass> list2; 但是使用名称atribute。您可以在两个列表中使用ListUtils.subtract。要使其工作,
List<MyClass> list1;
List<MyClass> list2;
但是使用名称atribute。您可以在两个列表中使用ListUtils.subtract。要使其工作,必须定义自定义类的
equals
方法,当且仅当两个对象的name属性相同时,才能返回true
也就是说,ListUtils.substract
不会给出两个列表之间的交集。为此,您可以使用ListUtils.retainal
。您也可以简单地使用List.retainAll
,但它会修改您的列表,而不是创建副本,因此您应该自己创建这样的副本
编辑:所以你们不想要交集,你们真的想要减法。这样很好,只需将对象的等号写为:
bool equals(Object other) {
if (other==null || !other instanceof MyClass) {
return false;
}
return name.equals(other.name); // assume name is never null. You can check for that
}
您还可以使用列表中的Collection.removeAll
覆盖
等于
并不总是切实可行的,例如,如果您有不同的场景,需要根据其他属性进行比较。在这种情况下,您可以使用比较器
和Collections2.filter
from.您可以将ListUtils.subtract与两个列表一起使用。要使其工作,必须定义自定义类的equals
方法,当且仅当两个对象的name属性相同时,才能返回true
也就是说,ListUtils.substract
不会给出两个列表之间的交集。为此,您可以使用ListUtils.retainal
。您也可以简单地使用List.retainAll
,但它会修改您的列表,而不是创建副本,因此您应该自己创建这样的副本
编辑:所以你们不想要交集,你们真的想要减法。这样很好,只需将对象的等号写为:
bool equals(Object other) {
if (other==null || !other instanceof MyClass) {
return false;
}
return name.equals(other.name); // assume name is never null. You can check for that
}
您还可以使用列表中的Collection.removeAll
覆盖等于
并不总是切实可行的,例如,如果您有不同的场景,需要根据其他属性进行比较。在这种情况下,您可以使用比较器
和Collections2.filter
from.答案是没有rtf
你为什么不用谷歌自己找呢
为什么不使用ide来显示文档
我认为覆盖等于解决问题,但这是一个黑客
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String arg[]) {
ArrayList<Dog> firstGroup = new ArrayList<Dog>();
firstGroup.add(new Dog("Rintintin"));
firstGroup.add(new Dog("Courage"));
firstGroup.add(new Dog("Scooby-Dooby-Do"));
ArrayList<Dog> secondGroup = new ArrayList<Dog>();
secondGroup.add(new Dog("fido"));
secondGroup.add(new Dog("Courage"));
secondGroup.add(new Dog("Rintintin"));
List<Dog> filterByName = filterByName(firstGroup,secondGroup);
System.out.print(Arrays.toString(filterByName.toArray()));
}
private static List<Dog> filterByName(ArrayList<Dog> firstGroup, ArrayList<Dog> secondGroup) {
List<Dog> result=new ArrayList<>();
for (Dog orginal : firstGroup)
for (Dog finDog : secondGroup)
if(orginal.getName().equals(finDog.getName()))
result.add(new Dog(orginal.getName()));
return result;
}
}
import java.util.ArrayList;
导入java.util.array;
导入java.util.List;
公共班机{
公共静态void main(字符串arg[]){
ArrayList firstGroup=新的ArrayList();
添加(新狗(“rintin”);
第一组。添加(新狗(“勇气”);
添加(新狗(“史酷比·杜比”);
ArrayList secondGroup=新的ArrayList();
第二组。添加(新狗(“fido”));
第二组。添加(新狗(“勇气”);
第二组。添加(新狗(“rintin”);
List filterByName=filterByName(第一组,第二组);
System.out.print(Arrays.toString(filterByName.toArray());
}
专用静态列表筛选器ByName(ArrayList firstGroup,ArrayList secondGroup){
列表结果=新建ArrayList();
对于(犬源:第一组)
对于(狗查找犬:第二组)
if(original.getName().equals(finDog.getName()))
添加(新狗(original.getName());
返回结果;
}
}
答案是没有rtf
你为什么不用谷歌自己找呢
为什么不使用ide来显示文档
我认为覆盖等于解决问题,但这是一个黑客
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String arg[]) {
ArrayList<Dog> firstGroup = new ArrayList<Dog>();
firstGroup.add(new Dog("Rintintin"));
firstGroup.add(new Dog("Courage"));
firstGroup.add(new Dog("Scooby-Dooby-Do"));
ArrayList<Dog> secondGroup = new ArrayList<Dog>();
secondGroup.add(new Dog("fido"));
secondGroup.add(new Dog("Courage"));
secondGroup.add(new Dog("Rintintin"));
List<Dog> filterByName = filterByName(firstGroup,secondGroup);
System.out.print(Arrays.toString(filterByName.toArray()));
}
private static List<Dog> filterByName(ArrayList<Dog> firstGroup, ArrayList<Dog> secondGroup) {
List<Dog> result=new ArrayList<>();
for (Dog orginal : firstGroup)
for (Dog finDog : secondGroup)
if(orginal.getName().equals(finDog.getName()))
result.add(new Dog(orginal.getName()));
return result;
}
}
import java.util.ArrayList;
导入java.util.array;
导入java.util.List;
公共班机{
公共静态void main(字符串arg[]){
ArrayList firstGroup=新的ArrayList();
添加(新狗(“rintin”);
第一组。添加(新狗(“勇气”);
添加(新狗(“史酷比·杜比”);
ArrayList secondGroup=新的ArrayList();
第二组。添加(新狗(“fido”));
第二组。添加(新狗(“勇气”);
第二组。添加(新狗(“rintin”);
List filterByName=filterByName(第一组,第二组);
System.out.print(Arrays.toString(filterByName.toArray());
}
专用静态列表筛选器ByName(ArrayList firstGroup,ArrayList secondGroup){
列表结果=新建ArrayList();
对于(犬源:第一组)
对于(狗查找犬:第二组)
if(original.getName().equals(finDog.getName()))
添加(新狗(original.getName());
返回结果;
}
}
使对象实现。在compareTo()
方法中,根据name属性进行比较。使对象实现。在compareTo()
方法中,根据name属性进行比较。您还可以使用comparator和comparable。下面是一个示例,您也可以使用comparator和comparable。下面是一个示例代码。还要澄清这个问题。当两个对象在不同的列表中具有相同的名称时,您希望发生什么?重写equals
方法?试过了吗?密码就好了。还要澄清这个问题。当两个对象在不同的列表中具有相同的名称时,您希望发生什么?重写equals
方法?试过这个吗?