计算阵列列表中某些类型的引用数量



假设我已经做了以下内容。

ArrayList<Object> happylist = new ArrayList<Object>();
happylist.add("cat");
happylist.add(98);
...

等等,添加不同类型的元素。什么样的方法可以帮助我计算我的Arraylist中有多少次对某些类型的引用?

您可以使用getClass()方法来确定某些对象的类。

查看对象的文档。

可以很容易地完成使用反射列表中不同类型的参考的数量。我已经编码以下方法:

public Map<String, Integer> countReferences(List<Object> happyList) {
    Map<String, Integer> referenceCounter = new HashMap<>();
    for (Object object : happyList) {
        String className = object.getClass().getName();
        referenceCounter.put(className, referenceCounter.getOrDefault(className, 0) + 1);
    }
    return referenceCounter;
}

基本上,每个具有差异名称的类给出差异参考。通过计算每种类型的引用,并将它们存储在地图中可以为您提供所需的内容。

,但我不太确定此类特定问题的有用性。

static long countByTypeJava8(Collection col, Class clazz) {
    return col.stream()
            .filter(clazz::isInstance)
            .count();
}
static long countByType(Collection col, Class clazz) {
    long count = 0;
    for (Object o : col) {
        if (clazz.isInstance(o)) {
            count++;
        }
    }
    return count;
}

在Java 8或其他高版本中,您可以使用流组API执行此类简单代码:

    ArrayList<Object> happylist = new ArrayList<Object>();
    happylist.add("cat");
    happylist.add(98);
    happylist.add(198);
    happylist.add(1L);
    Map<Object,IntSummaryStatistics> result = happylist.stream()
            .collect(Collectors.groupingBy(o -> o.getClass(),Collectors.summarizingInt(value -> 1)));
    // output result
    result.entrySet().stream()
            .forEach(entry -> System.out.println(String.format("class name = %st sum count = %d",entry.getKey(),entry.getValue().getSum())));

intsummaryStatistics是用于收集统计数据的状态对象,例如计数,最低,最大,总和和平均值。

谢谢您的回答,他们对此有很大帮助。对于现实生活中的特殊问题,我能够事先知道我正在寻找什么类型来缓解问题。就我而言,我做了以下方法来调用主要方法。

int counter = 0;
for (int i = 0; i < happylist.size(); i++) {
   if (happylist.get(i) instanceof WantedType) {
      counter++;
   }
} return counter;

最新更新