遍历java中的Hetrogenous Collection

时间:2016-05-26 07:58:56

标签: java collections

我的收藏品中包含大量 Hetrogenous Objects 。 e.g。

    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种对象,那就很好。 什么是通用解决方案。

2 个答案:

答案 0 :(得分: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))

答案 1 :(得分:0)

按类

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