类Person
具有几个子类别,包括Employee
。
有一种方法应该返回另一个List
,该方法仅由Person
的原始列表中的Employee
对象组成。
我如何在Java中完成此操作?
简单的示例:
public class Test {
public static void main(String[] args) {
List<Person> lst = new ArrayList<Person>() {
{
add(new Person());
add(new Person());
add(new Employee());
add(new Employee());
add(new AnotherPerson());
add(new AnotherPerson());
}
};
List<Person> employes = lst.stream().filter(item -> item instanceof Employee).collect(Collectors.toList());
System.out.println(employes.size());
}
class Person {
}
class Employee extends Person {
}
class AnotherPerson extends Person {
}
}
因为
人有几个子类
和
返回另一个仅由员工对象组成的列表
您应使用instanceOf
来完成查找List<Person>
的Employee
类。仅用于例如:
List<Person> personList // assigned to something
List<Employee> employeeList = new ArrayList<>();
for(Person person : personList) {
if(person !=null && person instanceOf Employee) {
employeeList.add((Employee) person);
}
}
Java-Nutsandbolts的样本可能会帮助您。
使用操作员时,请记住
null
不是 任何事物的实例。
其他答案和评论应该提供解决方案,但是如果您想要通用的解决方案,那么您可以做这样的事情:
public static <T extends Person> List<T> getPersonTypes(Class<T> cls, Collection<Person> c)
{
return c.stream()
.filter(Objects::nonNull)
.filter(p -> cls.isAssignableFrom(p.getClass()))
.map(cls::cast)
.collect(Collectors.toList());
}
然后称之为这样的东西:
List<Employee> employees = getPersonTypes(Employee.class, listOfPersons);