在java中创建并返回集合,然后在main中使用toString打印以打印新集合

在java中创建并返回集合,然后在main中使用toString打印以打印新集合,java,Java,这是一个需要使用此处显示的方法回答的问题,没有其他方法(这是一个考试问题) 我有一个Person和Friends(树集来容纳Person)课程 Person类只是创建了一个带有sName和fName的Person实例 在friends中,我有一个方法getnam姓氏(),该方法查找对象人物的姓氏,并将其添加到一个具有所有匹配姓氏的新集合中: //Gets the surname of the object and create a new set public TreeSet<Person

这是一个需要使用此处显示的方法回答的问题,没有其他方法(这是一个考试问题)

我有一个
Person
Friends
(树集来容纳Person)课程

Person类只是创建了一个带有sName和fName的Person实例

在friends中,我有一个方法
getnam姓氏()
,该方法查找对象人物的姓氏,并将其添加到一个具有所有匹配姓氏的新集合中:

//Gets the surname of the object and create a new set
public TreeSet<Person> getSurname(String s){
    TreeSet<Person> surname = new TreeSet<Person>();

    for(Person currentPerson : friendsSet) { 
        if(currentPerson.getsName().equals(s)) {
            surname.add(currentPerson);
        }
    }

    return surname;

}

public String toString() {
    return "Friends [friendsSet=" + friendsSet + "]";
}
它只打印出“玛丽”、“奥基夫”,还应该打印出“罗塞拉”、“奥基夫”

我将返回一个新的树集(getnam姓氏()),其姓氏与方法中使用的参数匹配


然后调用该方法,然后调用toString()方法打印新列表中的所有名称。

如果没有看到Person类的实现,我无法调试您的确切问题,但您的问题可能在于从
Comparable
接口实现
compareTo(Person p)
方法

如果在
比较功能中有类似的功能:

@Override
public int compareTo(Person p) {
    return sName.compareTo(p.sName);
}
然后,树集将同时看到
Person(“玛丽”、“奥基夫”)
Person(“罗斯拉”、“奥基夫”)
Person对象作为同一个对象

这是因为集合只包含唯一的元素。它使用
compareTo
函数来确定集合中是否已经存在元素

要解决此问题,您需要同时比较姓名和姓氏,如下所示:

@Override
public int compareTo(Person p) {
    return fName.compareTo(p.fName) + sName.compareTo(p.sName);
}
@Override
public int compareTo(Person p) {
    return fName.compareTo(p.fName) + sName.compareTo(p.sName);
}