2013-07-18 8 views
15

私はStringの配列を持っている:JavaのString []内のStringの出現回数をカウントする1ライナー?

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

は、その配列内の文字列の出現回数をカウントする簡単な方法はありますか?

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

しかし、このためのユーティリティ関数があった場合、私は思っていた:はい、私は自分自身をカウント反復して行うことができます知っています。 ArraysまたはArrayUtilsに何も見つかりませんでした。 1ライナーでこれを行うことは可能ですか?

+0

[アレイ内の各項目のJavaカウントの発生]の複製が可能です。(http://stackoverflow.com/questions/8098601/java-count-occurrence-of-each-item-in-an-array) –

答えて

74

あなたはthe frequency methodを使用することができます。

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

または1行に:Javaの8で

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

あなたも書き込むことができます。

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

又は方法を用いたがリファレンス:

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

ニート!そのことを知らなかった。 +1 –

+0

完璧! +1 –

+0

あなたは知恵を提供しました –

2

有用なユーティリティでいっぱいのGuavaを試すこともできます。コードの下に使用して、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); 
    } 

私はあなたが単一のライナーを探していますが、グアバは、日常のjava utilsのでは不可能な、より多くのutilsのの完全であることを知っているが。

+1

'int count = HashMultiset.create(Arrays.asList(myArray))。count(" B ");' ;-) – assylias

関連する問題