Подтвердить что ты не робот

Удалить нулевые элементы из списка

List<String> list = new ArrayList<String>();
  list.add("One");
  list.add(null);
  list.add("Two!");
  list.add(null);
  list.add("Three");
  list.add(null);
  list.add("Four");
  list.add(null);

У меня есть список, содержащий элементы null. Есть ли способ удалить элементы null из текущей коллекции без использования итераций?

4b9b3361

Ответ 1

Это должно работать:

list.removeAll(Collections.singleton(null));  

Ответ 2

В java 8 вы можете использовать Collection.removeIf:

list.removeIf(Objects::isNull);

Ответ 3

Расширьте ArrayList и переопределите метод add() и addAll() и просто не разрешайте null

или вы можете использовать list.removeAll(null);, как показано здесь , который внутренне выполняет итерацию цикла

Ответ 4

Взгляните на LambdaJ, который позволяет вам манипулировать коллекциями "без" циклов. На самом деле петли реализованы внутри библиотеки, но это действительно здорово, и это упрощает ваш код и делает его короче.

Ответ 5

неэффективен, но работает

while(list.remove(null));

Ответ 6

Если вы сами создаете список и не уверены, что значение равно null или нет, вы также можете использовать CollectionUtils.addIgnoreNull(list,elementToAdd); Это предотвратит добавление ненужных элементов. Это работает только при построении списка. Если вы получаете список из другого места и хотите удалить все ненулевые элементы до использования списка, то list.removeAll(Collections.singleton(null)); будет лучше

Ответ 7

for (int i = 0; i <array.size(); i++) {
    for (int j = 0; j < array.size()-i-1; j++) {
        if (array.get(j) > array.get(j+i)){
            Integer t = array.get(j+i);
            array.set(j+i,array.get(j));
            array.set(j,t);
        }
    }
}

for(int i = array.size()-1; i >= 0; i--){

В порядке возрастания, какой будет убывающий порядок этой проблемы?

Ответ 8

Использование google.common.:

import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;

public List<String> removeBlanks(List<String> list) {
    return Lists.newArrayList(Iterables.filter(list, new Predicate<String>() {

        @Override
        public boolean apply(String arg) {
            return StringUtils.isNotEmpty(arg);
        }
    }));
}