2013-07-18 40 views
15

Tôi có một mảng của String:Một lớp lót để đếm số lần xuất hiện của chuỗi trong một chuỗi [] trong Java?

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

Có một cách nhanh chóng để đếm số lần xuất hiện của một chuỗi trong mảng đó? Có, tôi biết tôi có thể lặp lại và tự mình đếm:

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

Nhưng tôi đã tự hỏi liệu có một chức năng tiện ích cho việc này hay không. Tôi không thể tìm thấy bất kỳ điều gì trong số Arrays hoặc ArrayUtils. Có thể làm điều này với một lớp lót không?

+0

có thể trùng lặp của [Số lần xuất hiện số Java của mỗi mục trong một mảng] (http://stackoverflow.com/questions/8098601/java-count-occurrence-of-each-item-in-an-array) –

Trả lời

74

Bạn có thể sử dụng the frequency method:

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

hoặc trong một dòng:

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

Với Java 8 bạn cũng có thể viết:

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

Hoặc với một phương pháp tham chiếu:

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

Gọn gàng ! Không biết điều đó. +1 –

+0

hoàn hảo ....! +1 –

+0

Bạn đã cung cấp sự khôn ngoan –

2

Bạn cũng có thể thử sử dụng Guava có đầy đủ các tiện ích hữu ích. Sử dụng mã dưới đây, bạn có thể đếm tần số qua 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); 
    } 

Mặc dù tôi biết rằng bạn đang tìm kiếm một lót duy nhất, nhưng Ổi là đầy đủ của nhiều utils hơn đó là không thể với utils java thói quen.

+1

Bạn có thể làm cho nó một lớp lót với: 'int count = HashMultiset.create (Arrays.asList (myArray)). Count (" B ");' ;-) – assylias

Các vấn đề liên quan