我是Java的初学者,所以这可能是一个非常基本的问题,但我无法在任何地方找到答案。
我想知道如何计算数组列表中每个对象的数量,其中的项目未在代码中命名?
我有两个班,一个用于模拟自动售货机,另一个用于代表小吃。小吃类的构造函数将小吃类型作为字符串类型启动,如下所示:
public TypeOfSnack(String SnkType)
然后在自动售货机类中,这些可以添加到arraylist上。这个领域是:
private ArrayList<TypeOfSnack> snacks;
我知道通过snacks.size()获得数组列表中的零食数量;但是如何返回每种类型的数量。到目前为止,我已经完成了:
public int countSnacks(String SnkType)
{
return packets.size();
}
这只是给了我总量而不是通过该方法的总量。
由于
答案 0 :(得分:1)
您可以将实际列表转换为唯一的项目列表,之后,您可以使用方法Collections.frequency来了解相同元素在列表中出现的时间。
示例:
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>();
numbers.add(5);
numbers.add(5);
numbers.add(5);
numbers.add(3);
numbers.add(5);
numbers.add(5);
numbers.add(2);
numbers.add(5);
Map<Integer, Integer> result = new HashMap<>();
for(Integer unique : new HashSet<>(numbers)) {
result.put(unique, Collections.frequency(numbers, unique));
}
System.out.println(result);
}
输出:
{2 = 1,3 = 1,5 = 6}
答案 1 :(得分:0)
据我了解,您希望将每个零食的数量存储在ArrayList中
ArrayList不适合这个问题,你应该使用HashMap。
也许类似下面的代码:
HashMap<String, Integer> snacks = new HashMap<String, Integer>();
snacks.put("Chips", 5);
snacks.put("Fried", 2);
获取零食的数量:
int numberOfChips = snacks.get("Chips");
或者如果你想按自己的方式去做:
public int getNumberOf(String snackType) {
int value = 0;
for(TypeOfSnack s : snacks) {
if(s.getType().equals(snackType)) {
value++;
}
}
}