2011-12-19 102 views
22
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元素的列表。有沒有辦法從當前集合中刪除元素而不使用任何迭代?刪除列表中的空元素

+5

沒有你寫的任何迭代,或在所有? http://stackoverflow.com/questions/4819635/how-to-remove-all-null-elements-from-a-arraylist – LuckyLuke 2011-12-19 09:25:18

回答

48

這應該工作:

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

好戲。真的行。 – AlexR 2011-12-19 09:56:21

+0

'List.removeAll()'的時間複雜度爲** n^2 **。只是說。 – Hemanth 2016-02-03 14:07:13

+0

@Hermanth對於那個單身人士來說'm == 1'的複雜性不會是'n * m'嗎? – kratenko 2016-03-16 14:36:30

5

擴展ArrayList並覆蓋add() & addAll()方法,只是不允許null

或者你可以使用list.removeAll(null);如圖here在內部迭代循環

+5

我不喜歡擴展這樣的類,因爲它可能導致代碼混淆。您還應該記住,您還可以使用[ListIterator]將項目添加到列表中(http://docs.oracle.com/javase/1.4.2/docs/api/java/util/ListIterator.html#add %28java.lang.Object%29) – Kai 2011-12-19 09:36:01

3

就以LambdaJ來看看,讓你操作集合「沒有」循環。實際上,循環是在庫內部實現的,但它非常酷,它簡化了代碼並縮短了代碼長度。

+0

+1新信息 – 2011-12-19 11:44:29

0

如果是自己建立的名單,不知道,如果值爲null或不是,你也可以使用CollectionUtils.addIgnoreNull(list,elementToAdd);這將防止被添加null元素。這隻適用於構建列表。如果是從其他地方接收名單,並希望前刪除所有非空元素,使用列表,那麼list.removeAll(Collections.singleton(null));將是最好的

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

它是一個升序排列,究竟會下降這一問題的順序?

+0

問題應該在單獨的線程中提出。 [點擊這裏](http://stackoverflow.com/questions/ask)如果你想問你的問題。回答問題意味着回答問題,而不是問另一個問題。 – 2016-04-10 16:21:36

2

效率不高,但工作

while(list.remove(null));

0

使用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); 
     } 
    })); 
}