Java 如何计算对象的ArrayList中枚举的频率

Java 如何计算对象的ArrayList中枚举的频率,java,collections,enums,Java,Collections,Enums,作为我问题的一个例子。。。假设我有一个ArrayList包含Car对象。汽车对象由模型和颜色枚举组成。我想统计一下列表中有多少奥迪车型,奥迪是一个ENUM 我有一个名为int的int变量 我正在尝试Audi=Collections.frequency(list,Model.Audi) 但是,它不计算频率和Audi=0 我哪里出错了?如何计算枚举的频率 Collections.frequency仅当数组包含与传递的对象类型相同的对象时才起作用。在这种情况下,您有一个类型的数组,并且正在检查Mode

作为我问题的一个例子。。。假设我有一个
ArrayList
包含
Car
对象。
汽车
对象由
模型
颜色
枚举组成。我想统计一下列表中有多少奥迪车型,奥迪是一个
ENUM

我有一个名为int的int变量

我正在尝试
Audi=Collections.frequency(list,Model.Audi)

但是,它不计算频率和
Audi=0


我哪里出错了?如何计算枚举的频率

Collections.frequency
仅当数组包含与传递的对象类型相同的对象时才起作用。在这种情况下,您有一个
类型的数组,并且正在检查
Model
类型的对象(Car实例永远不会等于枚举模型)


您需要编写自己的循环来完成并执行计数(应该很容易)。

您使用的
集合频率不正确;您在
Car
s列表中查找
Model
enum,因此计数为0也就不足为奇了

如果您使用的是Java 8,则可以设置
,以便
过滤内容,然后
计数
其余元素。这假设
Car
有一个
getModel
getter方法

long audi = list.stream().filter( c -> c.getModel() == Model.AUDI ).count();
另一种方法(需要java8)是首先使用groupBy(在您的例子中是groupBy self),它将返回
Map
,传递
collector.counting()将返回Map

import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
import com.google.common.collect.Lists;

//guava & pseudocode
List<Car> listOfCars = Lists.newArrayList(Car.AUDI, Car.BMW, Car.AUDI, Car.AUDI, Car.BMW);

listOfCars.stream()
        .collect(Collectors.groupingBy(
                Function.identity(), 
                Collectors.counting()));
import java.util.List;
导入java.util.function.function;
导入java.util.stream.collector;
导入com.google.common.collect.list;
//番石榴伪码
List listOfCars=Lists.newArrayList(Car.AUDI,Car.BMW,Car.AUDI,Car.AUDI,Car.BMW);
listOfCars.stream()
.collect(收集器.groupingBy(
Function.identity(),
收集器。计数();

请显示您的
汽车
课程的源代码。您的
列表
不是车型列表,而是汽车列表。当循环
频率
将找到的
汽车
车型
进行比较时,您通过了ans,因为没有汽车与您获得的车型相同
0