2013-07-18 38 views
15

我有String数组:单线程来统计Java中String []中String的出现次数?

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

是否有一个快速的方法来计算该阵列中字符串出现的次数?是的,我知道我可以迭代和自己做计数:

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

但我想知道是否有一个这样的效用函数。我在ArraysArrayUtils中找不到任何东西。是否可以用单线程来做到这一点?

+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"); 

或一条线:

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

与Java 8,你也可以这样写:

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); 
    } 

虽然我知道你正在寻找一个衬垫,但番石榴充满更多的utils的这是不可能的常规的java utils软件包。

+1

你可以使它成为一行:'int count = HashMultiset.create(Arrays.asList(myArray))。count(“B”);';-) – assylias

相关问题