2016-05-26 2 views
0

У меня есть коллекция, в которой содержится большое количество Hetrogenous Objects. напримерПрохождение Хетрогенная коллекция в java

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

Мне нужно, чтобы пройти эту коллекцию, и все подобные объекты необходимо сгруппировать вместе и положить в другой новой коллекции. Средства e1, e2, e3 мы можем положить в одну коллекцию. Мы можем использовать InstanceOf, но это будет хорошо, если есть только 2-3 типа объектов. Какое будет общее решение для этого.

+0

добавьте то, что вы пробовали до сих пор? @Amol –

ответ

0

Группа их на классы объектов:

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

Полученная карта будет содержать набор объектов с одинаковыми классами.

Если у вас есть подклассы (например, class SubStudent extends Student), они будут находиться в отдельных классах из их родительских классов; если это не совсем то, что вам нужно, вы можете вернуться и объединить map.get(SubStudent.class) с map.get(Student.class), например. map.get(Student.class).addAll(map.remove(SubStudent.class)).

0

Group экземпляром класса

Map<Class, List<Object>> map = list.stream() 
    .collect(Collectors.groupingBy(o-> o.getClass())); 
Смежные вопросы