类Person
有几个子类,包括Employee
。
有一种方法可以返回另一个List
,它只包含Employee
原始列表中的Person
个对象。
如何在Java中完成此操作?
答案 0 :(得分:2)
简单的例子:
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 {
}
}
答案 1 :(得分:1)
自
人有几个子类
和
返回另一个只包含Employee对象的List
您应使用instanceOf
来完成从Employee
寻找专门寻找List<Person>
班级的工作。只是为了例如:
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的示例可能对您有帮助。
使用instanceof运算符时,请记住
null
不是 任何事情的实例。
答案 2 :(得分:0)
其他答案和评论应提供解决方案,但如果您想要通用解决方案,那么您可以这样做:
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);