Ответ 1
Это должно работать:
list.removeAll(Collections.singleton(null));
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 из текущей коллекции без использования итераций?
Это должно работать:
list.removeAll(Collections.singleton(null));
В java 8 вы можете использовать Collection.removeIf
:
list.removeIf(Objects::isNull);
Расширьте ArrayList
и переопределите метод add()
и addAll()
и просто не разрешайте null
или вы можете использовать list.removeAll(null);
, как показано здесь , который внутренне выполняет итерацию цикла
Взгляните на LambdaJ, который позволяет вам манипулировать коллекциями "без" циклов. На самом деле петли реализованы внутри библиотеки, но это действительно здорово, и это упрощает ваш код и делает его короче.
неэффективен, но работает
while(list.remove(null));
Если вы сами создаете список и не уверены, что значение равно null или нет, вы также можете использовать CollectionUtils.addIgnoreNull(list,elementToAdd);
Это предотвратит добавление ненужных элементов. Это работает только при построении списка. Если вы получаете список из другого места и хотите удалить все ненулевые элементы до использования списка, то list.removeAll(Collections.singleton(null));
будет лучше
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--){
В порядке возрастания, какой будет убывающий порядок этой проблемы?
Использование 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);
}
}));
}