2016-05-26 10 views
0

Ich habe Sammlung, in der große Menge von Hetrogenous Objects bestehen. z.B.Traversing Hetrogenous Sammlung in Java

Employee e1, e2, e3 = new Employee(); 
    Student s1, s2, s3 = new Student(); 
    Department d1, d2, d3 = new Department(); 
........etc 

Ich brauche diese Sammlung zu durchlaufen und alle ähnlichen Objekte müssen zusammen gruppiert und in einer anderen neuen Kollektion zu setzen. Mittel e1, e2, e3 können wir in einer Sammlung setzen. Wir können InstanceOf verwenden, aber das wird gut, wenn es nur 2-3 Arten von Objekten gibt. Was wird generische Lösung dafür sein.

+0

fügen Sie bitte, was Sie bisher versucht haben? @Amol –

Antwort

0

Gruppe sie auf den Objekten Klassen:

Map<Class<?>, Set<Object>> map = new HashMap<>(); 
for (Object obj : collection) { 
    map.computeIfAbsent(obj.getClass(), (k) -> new HashSet<Object>()) 
     .add(obj); 
} 

Die resultierende Karte Gruppen von Objekten mit identischen Klassen enthält.

Wenn Sie Subklassen (z. B. class SubStudent extends Student) haben, werden diese in separaten Klassen von ihren Elternklassen sein; Wenn dies nicht genau das ist, was gewünscht wird, können Sie zurück gehen und map.get(SubStudent.class) mit map.get(Student.class), z.B. map.get(Student.class).addAll(map.remove(SubStudent.class)).

0

Gruppe durch die Instanz der Klasse

Map<Class, List<Object>> map = list.stream() 
    .collect(Collectors.groupingBy(o-> o.getClass()));