如何计算数组列表(Java)中每个对象的数量?

时间:2017-06-25 20:23:36

标签: java arraylist

我是Java的初学者,所以这可能是一个非常基本的问题,但我无法在任何地方找到答案。

我想知道如何计算数组列表中每个对象的数量,其中的项目未在代码中命名?

我有两个班,一个用于模拟自动售货机,另一个用于代表小吃。小吃类的构造函数将小吃类型作为字符串类型启动,如下所示:

public TypeOfSnack(String SnkType)

然后在自动售货机类中,这些可以添加到arraylist上。这个领域是:

private ArrayList<TypeOfSnack> snacks;

我知道通过snacks.size()获得数组列表中的零食数量;但是如何返回每种类型的数量。到目前为止,我已经完成了:

public int countSnacks(String SnkType)
    {
        return packets.size();
    }

这只是给了我总量而不是通过该方法的总量。

由于

2 个答案:

答案 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++;
        }
    }
}