2017-01-04 8 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, а затем вы не должны сравнивать на animalList.get (x), но на чем-то вроде animalsList.get (x) .getAnimalName(), потому что вы хотите найти несколько вхождений имени животного. –

ответ

4

Самое простое решение, ИМХО будет течь список животных, группы по имени и посчитайте:

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

Благодарим за решение. !! –

Смежные вопросы