2014-01-08 2 views
1

Например, у меня есть список со следующими значениямиКак бы вы «сжимали» список?

{"A", null, null, "B", null, "C", null, "D", "E", null} 

Что бы наиболее эффективный способ сжатия, что

{"A", "B", "C", "D", "E"} 

Есть ли способ сделать это быстро и эффективно, не создавая новый список. Было бы также хорошо, если сжатый список выглядел

{"A", "B", "C", "D", "E", null, null, null, null, null} 
+3

Итерации по списку удаления любого 'null' ссылки. Вы можете сделать это легко с помощью команды «Итератор» –

+0

«Совместить сравнительный интерфейс», а затем используйте Collections.sort (yourList), чтобы значение null больше нуля, и вы получите версию 2 вашего списка. – DwB

+0

Другой вариант: создать оболочку списка, которая игнорирует добавление (0) – DwB

ответ

11

Наиболее эффективным я знаю, с точки зрения эффективности кода, является

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

+1 Хороший Джо. –

+0

Не могу претендовать на оригинальный кредит - просто запомните это в какой-то момент и произнесите: «Черт, это остроумно». –

+0

Спасибо! Примите это, когда я смогу :) – Ryxuma

0

Если это действительно список Java (а не массив) , он должен автоматически перемещать элементы в Списке при удалении элемента.

Таким образом, в {A, B, C, D}

, если я называю list.remove (C), список должен выглядеть как {A, B, D}

0

Вы можете сделать это если вы хотите сохранить тот же список.

int end = 0; 
for(int i = 0; i < list.size(); i++) { 
    Object o = list.get(i); 
    if (o != null) 
     list.set(end++, o); 
} 
// remove the trailing values. 
list.sublist(end, list.size()).clear(); 
1

Может использовать этот простой цикл, чтобы удалить все пустые элементы

while(aList.remove(null)) {/*do nothing */}; 
Смежные вопросы