2013-07-18 15 views
15

Ho un array di String:One-liner per contare il numero di occorrenze di String in una stringa [] in Java?

String[] myArray = {"A", "B", "B", "C"}; 

C'è un modo rapido per contare il numero di occorrenze di una stringa in tale matrice? Sì, so che posso scorrere e fare lo stesso Count:

int count = 0; 
String whatToFind = "B"; 
for (String s : myArray) { 
    if (s.equals(whatToFind)) { 
     ++count; 
    } 
} 

ma mi chiedevo se ci fosse una funzione di utilità per questo. Non ho trovato nulla in Arrays o ArrayUtils. È possibile farlo con un solo rivestimento?

+0

possibile duplicato di [occorrenza del conteggio Java di ciascun elemento in un array] (http://stackoverflow.com/questions/8098601/java-count-occurrence-of-each-item-in-an-array) –

risposta

74

È possibile utilizzare the frequency method:

List<String> list = Arrays.asList(myArray); 
int count = Collections.frequency(list, "B"); 

o in una sola riga:

int count = Collections.frequency(Arrays.asList(myArray), "B"); 

Con Java 8 è possibile anche scrivere:

long count = Arrays.stream(myArray).filter(s -> "B".equals(s)).count(); 

O con un metodo riferimento:

long count = Arrays.stream(myArray).filter("B"::equals).count(); 
+12

Neat ! Non lo sapevo. +1 –

+0

perfetto ....! +1 –

+0

Hai fornito saggezza –

2

Si può anche provare a utilizzare Guava che è pieno di utilità utili. Usando il codice qui sotto, si può contare la frequenza tramite Multiset:

public static void main(final String[] args) { 
     String[] myArray = {"A", "B", "B", "C"}; 
     Multiset<String> wordsMultiset = HashMultiset.create(); 
     wordsMultiset.addAll(new ArrayList<String>(Arrays.asList(myArray))); 
     int counts=wordsMultiset.count("B"); 
     System.out.println(counts); 
    } 

Anche se so che siete alla ricerca di una singola linea, ma Guava è pieno di molti altri utils, che non sono possibili con utils java routine.

+1

Puoi renderlo un one-liner con: 'int count = HashMultiset.create (Arrays.asList (myArray)). Count (" B ");' ;-) – assylias

Problemi correlati