Java получить несколько элементов из коллекции - PullRequest
4 голосов
/ 21 февраля 2010

Есть ли в коллекциях Java встроенный метод для возврата нескольких элементов из этой коллекции? Например, приведенный ниже список содержит n элементов, некоторые из которых дублируются в списке. Как я могу получить все элементы, где значение = "один"? Я понимаю, что было бы очень легко написать свой собственный метод для достижения такой функциональности, я просто хотел убедиться, что я не пропускаю встроенный метод для этого.

List<String> ls=new ArrayList<String>();
ls.add("one");
ls.add("two");
ls.add("three");
ls.add("one");
ls.add("one");

//some type of built in function????
//ls.getItems("one");
//should return elements 0,3,4

Спасибо

Ответы [ 4 ]

2 голосов
/ 22 февраля 2010

В этом примере достаточно знать, сколько раз «один» появляется в списке, который вы можете получить с помощью java.util.Collections.frequency(ls, "one").

Возможно, вы также использовали Multiset из Google-коллекций и назвали m.count("one"), что было бы намного эффективнее.

2 голосов
/ 21 февраля 2010

Нет встроенного метода, но В Apache Commons есть метод select in CollectionUtils это получит все элементы, которые соответствуют некоторому критерию. Пример использования:

List<String> l = new ArrayList<String>();

// add some elements...

// Get all the strings that start with the letter "e".
Collection beginsWithE = CollectionUtils.select(l, new Predicate() {
  public boolean evaluate(Object o) {
    return ((String) o).toLowerCase().startsWith("e");
  }
);
2 голосов
/ 21 февраля 2010

Коллекции Google имеют Предикаты для этой цели.

0 голосов
/ 21 февраля 2010

Я думаю, что вы могли бы добиться того, чтобы сохранить элементы этого списка, которые находятся в другом списке, с помощью метода retainall класса Collection текст ссылки . В другой список вы можете добавить только один объект.

List<String> ls=new ArrayList<String>();
ls.add("one");
ls.add("two");
ls.add("three");
ls.add("one");
ls.add("one");

List<String> listToCompare = new ArrayList<String>();
listToCompare.add("one");
ls.retainAll(listToCompare);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...