抱歉,这已经完成了,但我真的很难实现这个问题的解决方案,而且我对 Java 还是很陌生。
我需要能够调用一个基本上允许将 Person 对象添加到列表中的方法。该方法需要检查该人是否已经在列表中。它需要按名字执行检查 - 我知道实际上这看起来很愚蠢,但在这种特定情况下我需要能够做到这一点。
然后该列表需要对类可用,以便稍后可以调用 print list of names 方法。
我在尝试实施解决方案时遇到的主要问题是“ConcurrentModificationException”,这是可以理解的,因为我一直在尝试在每个循环的中间更新列表。
因此,我提出了以下解决方案来防止“ConcurrentModificationException”,但我的解决方案无法正常工作并且似乎过于复杂 - 请参阅以下方法代码片段:
public void addPerson(Person aPerson) {
// tempPersons list for temporarily storing Person objects
tempPersons = new ArrayList<>();
// if persons list is initially empty, add aPerson object to it
if (persons.isEmpty()) {
persons.add(aPerson);
}
// if persons list is not initially empty
if (!persons.isEmpty()) {
// loop through persons list
for (Person anotherPerson : persons) {
// if persons list anotherPerson first name is the same as the aPerson first name, print message
if (anotherPerson.getFirstName().equals(aPerson.getFirstName())) {
System.out.println("The Person " + aPerson.getFirstName() +
" is already entered in the list");
}
// otherwise add the aPerson object to the tempPersons list
else {
tempPersons.add(aPerson);
}
}
// once out of loop, add the tempPersons list to the racers list
persons.addAll(tempPersons);
// create new tempPersons2 list based on a hashset of the persons list so there are no duplicates
List<Person> tempPersons2 = new ArrayList<>(
new HashSet<>(persons));
// assign tempPersons2 list without duplicates to persons list
persons = tempPersons2;
}
}
因此,例如,如果我使用唯一和重复对象(aPerson 参数)的混合分别调用上述 addPerson 方法 4 次,则该方法正确识别那里已经有一个具有相同名字的对象,但人员列表似乎总是最终在那里有一个重复的对象(名字),例如,如果我有以下对象:
Person1 名字 = Bob
Person2 名字 = Jan
Person3 名字 = Bob
Person4 名字 = Ann
然后我分别调用以下方法 4 次:
addPerson(Person1);
addPerson(Person2);
addPerson(Person3);
addPerson(Person4);
当我调用打印方法时,我得到以下输出:
人 Bob 已在列表中输入
简
安
鲍勃
鲍勃
我期望以下内容:
人 Bob 已在列表中输入
简
安
鲍勃
为所有的华夫饼道歉,对你们大多数人来说,这可能是一个非常简单的解决方案,但我已经坚持了几天。如果有人可以根据我提供的示例提供一个简单的解决方案,将不胜感激?
可以在此处找到类似的文章,但我仍在苦苦挣扎。