it-swarm-pt.tech

Remover elementos nulos da lista

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);

Eu tenho uma lista contendo nulo elementos. Existe alguma maneira de remover os elementos null da coleção atual sem usar iterações?

22
Noufal Panolan

Isso deve funcionar:

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

Em Java 8, você pode usar Collection.removeIf :

list.removeIf(Objects::isNull);
9
fabian

Estenda o método ArrayList e substitua add() & addAll() e simplesmente não permita null

ou você pode usar list.removeAll(null); como mostrado aqui Que itera internamente o loop

5
Jigar Joshi

Dê uma olhada no LambdaJ que permite manipular coleções "sem" loops. Na verdade, os loops são implementados dentro da biblioteca, mas são muito legais e simplificam o código e o tornam mais curto.

3
AlexR

não é eficiente, mas funciona

while(list.remove(null));

2

Se você está construindo a lista você mesmo e não tem certeza se o valor é nulo ou não, também pode usar CollectionUtils.addIgnoreNull(list,elementToAdd); Isso impedirá que elementos nulos sejam adicionados. Isso funciona apenas ao construir a lista. Se você estiver recebendo a lista de outro lugar e quiser remover todos os elementos não nulos antes de usar a lista, o list.removeAll(Collections.singleton(null)); será melhor

0
Jon Tinsman
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--){

É uma ordem crescente, qual será a ordem decrescente desse problema?

0
Shafique Mahar

Usando 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);
        }
    }));
}
0
Flavio