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
。