答案:通过遍历集合结合Map统计对象类型数量,可使用instanceof或getClass()获取类型,利用HashMap记录每类出现次数,示例中List包含多种对象,经处理后输出各类型计数;自定义类如Animal子类也可同法统计;Java 8可用Stream的groupingBy与counting()简化代码。

在Java中统计集合中不同类型对象的数量,可以通过遍历集合并使用instanceof判断对象类型,结合Map来记录每种类型的数量。以下是具体实现方式和示例。
使用 instanceof 和 Map 统计类型数量
假设你有一个存放多种对象的集合,比如 Object 类型的 List,你可以通过以下方式统计:
定义一个 Map,键为类名或类型标识,值为出现次数。
import java.util.*;
public class TypeCounter {
public static void main(String[] args) {
List
按自定义类型分类统计
如果你的集合包含自定义类的对象,比如继承自某个父类或接口,也可以用类似方法统计子类型数量。
立即学习“Java免费学习笔记(深入)”;
示例:统计不同动物类型的数量
abstract class Animal {}
class Dog extends Animal {}
class Cat extends Animal {}
class Bird extends Animal {}
public class AnimalCounter {
public static void main(String[] args) {
List animals = Arrays.asList(
new Dog(), new Cat(), new Dog(), new Bird(), new Cat()
);
Map countByType = new HashMap<>();
for (Animal animal : animals) {
String type = animal.getClass().getSimpleName();
countByType.merge(type, 1, Integer::sum);
}
System.out.println(countByType);
// 输出: {Dog=2, Cat=2, Bird=1}
}
}
使用 Java 8 Stream 简化统计
利用 Stream 和 Collectors.groupingBy 可以更简洁地实现相同功能。
Mapresult = objects.stream() .collect(Collectors.groupingBy( obj -> obj.getClass().getSimpleName(), Collectors.counting() ));
这种方式代码更简洁,适合函数式编程风格。
基本上就这些。根据集合内容选择合适的方法,核心是获取对象运行时类型并累加计数。注意 getClass() 比 instanceof 更适合多态场景,避免手动写多个条件判断。










