Java 如何计算arrayList中出现的相同值

Java 如何计算arrayList中出现的相同值,java,arraylist,count,Java,Arraylist,Count,下面是我想查找多次出现的动物名称的代码片段 我已经编写了比较列表索引的代码,但无法理解如何比较名称并计算每个名称的出现次数 List<Animals> animalList= new ArrayList<Animals>(); try { CallableStatement stmt = conn.prepareCall(callProcedure, ResultSet.TYPE_SCROLL_INSENSITIV

下面是我想查找多次出现的动物名称的代码片段

我已经编写了比较列表索引的代码,但无法理解如何比较名称并计算每个名称的出现次数

        List<Animals> animalList= new ArrayList<Animals>();

        try {
            CallableStatement stmt = conn.prepareCall(callProcedure, ResultSet.TYPE_SCROLL_INSENSITIVE,
                    ResultSet.CONCUR_READ_ONLY);

            boolean results = stmt.execute();

            if (results) {
                ResultSet rs = stmt.getResultSet();
                int count = 0;
                while (rs.next()) {

                    Animals animal = new Animals();

                    animal.setAnimalName(rs.getString("animal_name"));
                    animal.setAge(rs.getString("age"));
                    animal.setHealth(rs.getString("health"));
                    animalList.add(animal);
                    count++;             
                }
            }

            int nbOccurences = 1;

            for (int i = 0, length = animalList.size(); i < length; i++) {
                if (i < length - 1) {
                    if (animalList.get(i) == animalList.get(i+1)) {
                        nbOccurences++;
                    }
                } else {
                    System.out.println( animalList.get(i) + " occurs " + nbOccurences
                                    + " time(s)"); //end of array
                }

                if (i < length - 1 && animalList.get(i) != animalList.get(i+1)) {
                    System.out.println( animalList.get(i) + " occurs " + nbOccurences
                                    + " time(s)"); //moving to new element in array
                    nbOccurences = i;
                }

            }

        } catch (SQLException sqlE) {
            sqlE.printStackTrace();
        }

        return animalList;

IMHO最简单的解决方案是将动物列表按名称和数量分组:

Map<String, Long> nameCount = 
    animalList.stream()
              .collect(Collectors.groupingBy(Animal::getName, 
                                             Collectors.counting()));

IMHO最简单的解决方案是将动物列表按名称和数量分组:

Map<String, Long> nameCount = 
    animalList.stream()
              .collect(Collectors.groupingBy(Animal::getName, 
                                             Collectors.counting()));

首先,您应该记住Java中==和equals之间的差异,然后不应该在animalsList.getx上进行比较,而应该在animalsList.getx.getAnimalName之类的东西上进行比较,因为您希望找到多次出现的动物名称。首先,您应该记住Java中==和equals之间的差异,然后,您不应该在animallist.getx上进行比较,而应该在animallist.getx.getAnimalName上进行比较,因为您希望找到多次出现的动物名称。感谢您提供的解决方案。!!谢谢你的解决方案。!!