Целочисленный Java ArrayList возвращает элементы в определенном диапазоне - PullRequest
3 голосов
/ 14 сентября 2011

У меня есть Java ArrayList целого числа

ArrayList <Integer> ageList  = new ArrayList <Integer>();

У меня есть некоторые целочисленные значения в этом arrayList.Я хочу создать новый ArrayList, который имеет все элементы в вышеуказанном arrayList, который передает условие, например, значение между 25 и 35. То есть, если мой ageList содержит значения

{12,234,45,33,28, 56,27}

мой новый список должен содержать

{33,28,27}

Как мне этого добиться?

Примечание: я пришел в java с цели C, где я использовал NSPredicate, чтобы легко делать такие вещи ... Какие-нибудь похожие методы в java?

Ответы [ 7 ]

7 голосов
/ 14 сентября 2011

В стандартном API нет функции «фильтра». (Однако есть в Guava и Apache Commons .) Вам нужно будет создать новый список, перебрать исходный список и вручную добавить элементы в диапазоне 25-35 к новый список.

Если вы не собираетесь сохранять исходный список, вы можете удалить элементы вне диапазона, используя Iterator и Iterator.remove метод.

Если в вашем списке нет дубликатов, вы можете использовать TreeSet, в этом случае вы можете получить все элементы в определенном диапазоне, используя headSet / tailSet.

Смежный вопрос: (возможно, даже дубликат на самом деле)

6 голосов
/ 14 сентября 2011

Ну, с Гуавой вы могли бы написать:

Iterable<Integer> filtered = Iterables.filter(list, new Predicate<Integer>() {
    @Override public boolean apply(Integer value) {
        return value >= 25 && value <= 35;
    }
});
List<Integer> newList = Lists.newArrayList(filtered);
5 голосов
/ 14 сентября 2011

Вы можете использовать цикл foreach

List<Integer> newList = new ArrayList<Integer>();
for (Integer value : ageList) {
    if (value >= 25 && value <= 35) {
        newList.add(value);
    }
}
4 голосов
/ 14 сентября 2011

Попробуйте это:

ArrayList<Integer> newList = new ArrayList<Integer>(ageList);
for (Iterator<Integer> it = newList.iterator(); it.hasNext();) {
    int n = it.next();
    if (n < 25 || n > 35)
      it.remove();
}
1 голос
/ 14 сентября 2011

Невозможно со стандартным JCF. Вам придется повторяться.

Рассмотрите возможность использования гуавы. У него есть такие утилиты.

http://code.google.com/p/guava-libraries/

1 голос
/ 14 сентября 2011

Нет, в Java нет встроенной функциональности [AFAIK].

Возможны следующие шаги:

  1. Loop through ageList.
  2. Проверка условия.
  3. Если условие выполнено успешно, добавьте этот элемент ксписок или ничего не делать.

Пример кода:

    List<Integer> ageList = new ArrayList<Integer>();
    //-- add data in ageList

    List<Integer> newList = new ArrayList<Integer>();
    for (Integer integer : ageList) {
        if(integer >= 25 && integer <= 35)
            newList.add(integer);
    }
0 голосов
/ 14 сентября 2011

Переберите его и просто добавьте те, которые соответствуют?Это 3 строки кода ... 4, включая новое объявление ArrayList.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...