2017-09-14 89 views
-1

一個類Person有幾個小類,包括Employee如何在java中將對象從超類獲取到子類?

有一種方法應該返回另一個List,它只包含Person原始列表中的Employee對象。

如何在Java中完成此操作?

+1

看看[問] – pvg

+0

歡迎來到堆棧溢出。不幸的是你的問題質量很低。做一些研究,並告訴我們你到現在爲止做了什麼。請在閱讀之前閱讀https://stackoverflow.com/help/how-to-ask。 –

+0

請發佈您的「人員」和「員工」類,以更好地瞭解您的問題。 –

回答

1

由於

人有幾個子類

返回另一個列表其中只包含了員工的對象

您應使用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的樣本可能會幫助你。

當使用instanceof運算符,請記住,null不是任何一個 實例。

+0

是否還有其他方法可以做到這一點? –

+0

@ IT-KOKO instanceOf當你有多個Person子類時,它是最安全的方式。 – nullpointer

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 { 

} 
} 
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); 
相關問題