2017-01-04 12 views
1

ここには、複数の動物名を検索するコードのスニペットがあります。arrayList内の同じ値の数をカウントする方法

私はリストのインデックスを比較するコードを書いていますが、名前を比較して各名前の出現回数を数える方法を理解できません。

 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; 
+1

まず、あなたは「)等号(」==との違いを忘れてはなりませんでJavaの場合、animalsList.get(x)を比較するのではなく、animalsList.get(x).getAnimalName()などの動物の名前を複数見つけたいからです。 –

答えて

4

私見では、動物のリストをストリーム名でグループとカウントするだろう最も簡単な解決策、:

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

ありがとうございました! –

関連する問題