2014-01-22 17 views
6

Я ищу быстрый способ найти количество элементов, которые являются List один специфический элемент:Получить количество определенного элемента в списке

List<String> list = new ArrayList<String>(); 
list.add("apple"); 
list.add("banana"); 
list.add("apple"); 
list.add("kiwi"); 

// I'm looking for a method as List.amountOf(Object obj): 

list.amountOf("apple");  // should return 2 
list.amountOf("kiwi");  // should return 1 
list.amountOf("pear");  // should return 0 
+0

Рассмотрим с использованием классов фильтрации гуавы в. –

ответ

11

Вы можете использовать Collections.frequency:

int amountOfApple = Collections.frequency(list,"apple"); 

с Java 8 вы также будете иметь возможность сделать это с помощью потоков:

long amountOfApple = list.stream().filter(s -> "apple".equals(s)).count(); 
2

Если вы используете Eclipse Collections вы можете использовать либо MutableBag, либо MutableList, в зависимости от того, относится ли заказ к коллекции.

// If order doesn't matter 
MutableBag<String> bag = Bags.mutable.with("apple", "banana", "apple", "kiwi"); 

// O(1) for bag.occurrencesOf() 
Assert.assertEquals(2, bag.occurrencesOf("apple")); 
Assert.assertEquals(1, bag.occurrencesOf("kiwi")); 
Assert.assertEquals(0, bag.occurrencesOf("pear")); 

// If order does matter 
MutableList<String> list = Lists.mutable.with("apple", "banana", "apple", "kiwi"); 

// O(n) for collection.count() 
// Java 5 - 7 
Assert.assertEquals(2, list.count(Predicates.equal("apple"))); 
Assert.assertEquals(1, list.count(Predicates.equal("kiwi"))); 
Assert.assertEquals(0, list.count(Predicates.equal("pear"))); 

// using Java 8 Lambdas 
Assert.assertEquals(2, list.count(fruit -> fruit.equals("apple"))); 
Assert.assertEquals(1, list.count(fruit -> fruit.equals("kiwi"))); 
Assert.assertEquals(0, list.count(fruit -> fruit.equals("pear"))); 

// using Java 8 Method References 
Assert.assertEquals(2, list.count("apple"::equals)); 
Assert.assertEquals(1, list.count("kiwi"::equals)); 
Assert.assertEquals(0, list.count("pear"::equals)); 

// O(n) for collection.countWith() 
// using Java 8 Method References 
Assert.assertEquals(2, list.countWith(Object::equals, "apple")); 
Assert.assertEquals(1, list.countWith(Object::equals, "kiwi")); 
Assert.assertEquals(0, list.countWith(Object::equals, "pear")); 

Примечание: Я коммиттер для Eclipse, Коллекции

0

вы можете использовать Map

добавить псевдокод:

if(map.get("apple") != null){ 
    map.get("apple")++; 
}else{ 
map.put("apple",0); 
} 
Смежные вопросы