如何使用children重写的equals()方法检查父ArrayList中子对象的相等性



Hi非常感谢您帮助我们了解如何在这里检查相等性。

所以我有一个父类:人,子类:男人,女人,如果男人的对象每年赚同样的钱,而女人的对象年龄相同,那么这两个子类都是平等的。在父类中,人:我有一个数组列表,每个数组有5个男人和女人对象,其中一些对象将被认为是相等的,正如在每个子类equals(Object o(方法中定义的那样。我该如何筛选数组列表来打印相等的数组?

import java.util.ArrayList;
public class Person
{
private ArrayList<Person> people;
public Person()
{
people = new ArrayList<>();
people.add(new Man("John Smith", 51000));
people.add(new Man("Who Ever", 0));
people.add(new Man("Brent Groff", 51000));
people.add(new Man("Adam Nothing", 29000));
people.add(new Man("Bob Dob", 90000));
people.add(new Woman("Jane Smith", 45));
people.add(new Woman("Holly Way", 60));
people.add(new Woman("Anna Sheroka", 28));
people.add(new Woman("Fara Daniels", 28));
people.add(new Woman("Minie Do", 19));
}
public void displayAllEqualPeople()
{
for (int i  = 0; i < people.size() ; i++)
{
for (int j = 1 ; j < people.size() ; j++)
{
if (people.get(i) instanceof Man)
{
}
}
}
}
}

这将按薪资/年龄对人员进行分组。

Map<String, Person> men = people.stream()
.filter(p -> p instanceof Man)
.map(p -> (Man) p)
.collect(groupingBy(Man::getSalary));
Map<String, Person> women = people.stream()
.filter(p -> p instanceof Woman)
.map(p -> (Woman) p)
.collect(groupingBy(Woman::getAge));

最新更新