我有一个Java类

class Students{
    private String fName;
    private String lName;
    private String uName;


    public Students(String fName, String lName, String uName) {
            this.fName = fName;
            this.lName = lName;
            this.uName = uName;
     }

    public String getuName() {
        return uName;
    }
    public void setuName(String uName) {
        this.uName = uName;
    }
    public String getfName() {
        return fName;
    }
    public void setfName(String fName) {
        this.fName = fName;
    }
    public String getlName() {
        return lName;
    }
    public void setlName(String lName) {
        this.lName = lName;
    }

}


我也用这个

public class TestClass {
public static void main(String[] args) {

    Students students1 = new Students("xyz","abc","xyzAbc");
    Students students2 = new Students("poi","son","poison");
    Students students3 = new Students("yog","jos","yogjos");

    Students students4 = new Students("xyz","abc","xyzAbc");
    Students students5 = new Students("pon","son","xyzAbc");
    Students students6 = new Students("yog","jos","someotherUName");
    Students students7 = new Students("yog","jos","someotherUName2");

    List studentList1 = new ArrayList();
    List studentList2 = new ArrayList();

    studentList1.add(students1);
    studentList1.add(students2);
    studentList1.add(students3);

    studentList2.add(students4);
    studentList2.add(students5);
    studentList2.add(students6);
}
}


现在,我需要一个仅包含唯一的“ uName”值的过滤列表。
因此,我希望每个列表的“ uName”字段之间进行比较,并删除常见的列表。

最后,我需要2个过滤列表,分别用于studentList1和studentList2。

我读到有关removeAll方法的信息,但它似乎适用于整数/字符串数据列表,而不适用于对象列表(如我的情况)。

请提出建议。

最佳答案

如果removeAll中的对象正确实现了List,您仍然可以使用equals()

AbstractCollection是大多数List实现(包括ArrayList)的基础,它在contains()中使用its implementation of removeAllArrayListimplementation of contains依赖于indexOf(),最后使用equals()

您可以在equals()类中实现Student,以指定一个Student等于另一个,并且仅当它们的uName字段相等时。

请注意,equals具有关联的语义(请参见其javadoc),并且在选择实现方式时应格外小心。考虑两个学生实例在uName相等时是否真的代表同一学生。在我看来,这听起来像是对如何整理这些东西的非常具体的要求,并且不应影响类的语义。

使用@AlexR@KumarVivekMitra的方法会更好。

08-18 10:15
查看更多