我的收藏品中包含大量 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种对象,那就很好。
什么是通用解决方案。
答案 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()));