C’è un modo migliore per contare le ricorrenze int con Java8
int[] monthCounter = new int[12]; persons.stream().forEach(person -> monthCounter[person.getBirthday().getMonthValue() - 1]++);
Provare:
Map counters = persons.stream() .collect(Collectors.groupingBy(p -> p.getBirthday().getMonthValue(), Collectors.counting()));
Con le raccolte di Eclipse (ex GS Collections ), puoi utilizzare una struttura dati chiamata Bag
che può contenere il numero di occorrenze di ciascun elemento.
Utilizzando IntBag
, il seguente funzionerà:
MutableList personsEC = ListAdapter.adapt(persons); IntBag intBag = personsEC.collectInt(person -> person.getBirthDay().getMonthValue()).toBag(); intBag.forEachWithOccurrences((month, count) -> System.out.println("Count of month:" + month + " is " + count));
Se si desidera utilizzare una matrice per tenere traccia del conteggio, è ansible combinare con l’approccio Arrays.setAll()
che Brian ha indicato in un’altra risposta.
int[] monthCounter = new int[12]; MutableList personsEC = ListAdapter.adapt(persons); IntBag bag = personsEC.collectInt(person -> person.getBirthDay().getMonthValue()).toBag(); Arrays.setAll(monthCounter, bag::occurrencesOf); System.out.println(IntLists.immutable.with(monthCounter));
Questo codice funzionerà anche con Java 5 – 7 se si utilizzano classi interne anonime invece di lambda.
Nota: sono un committer per le raccolte di Eclipse
int size = persons.stream().count()