2011-12-19 7 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); 

से शून्य तत्वों को निकालें मेरी एक सूची है जिसमें शून्य तत्व शामिल हैं। क्या किसी भी पुनरावृत्ति के बिना शून्य तत्वों को मौजूदा संग्रह से निकालने का कोई तरीका है?सूची

+5

आप किसी भी पुनरावृत्तियों लेखन के बिना, या कम से सब? http://stackoverflow.com/questions/4819635/how-to-remove-all-null-elements-from-a-arraylist – LuckyLuke

उत्तर

48

यह काम करना चाहिए:

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

अच्छी चाल। यह सचमुच काम करता है। – AlexR

+0

'List.removeAll()' की समय जटिलता ** **^^ ** ** है। बस केह रहा हू। – Hemanth

+0

@ हरमंथ उस सिंगलटन के लिए 'm == 1' के साथ जटिलता' n * m' नहीं होगी? – kratenko

5

ArrayList बढ़ाएँ और add() & addAll() विधि ओवरराइड और बस null

की अनुमति नहीं है या आप से पता चला here कौन सा आंतरिक पाश

+5

मुझे ऐसी कक्षाओं को विस्तारित करना पसंद नहीं है, क्योंकि इससे भ्रमित कोड हो सकता है। आपको यह भी ध्यान में रखना चाहिए कि आप [ListIterator] (http://docs.oracle.com/javase/1.4.2/docs/api/java/util/ListIterator.html#add के साथ सूची में आइटम भी जोड़ सकते हैं। नई जानकारी के लिए% 28java.lang.Object% 29) – Kai

3

है कि आप की अनुमति देता है LambdaJ पर एक नजर डालें iterates के रूप में इस्तेमाल कर सकते हैं list.removeAll(null); "बिना" loops संग्रह संग्रह में हेरफेर करने के लिए। असल में लूप पुस्तकालय के अंदर लागू किए जाते हैं लेकिन यह वास्तव में अच्छा है और यह आपको कोड को सरल बनाता है और इसे छोटा बनाता है।

+0

+1 –

0

आप अपने आप को सूची बना रहे हैं और यकीन नहीं करता है, तो मान शून्य है या नहीं आप भी CollectionUtils.addIgnoreNull(list,elementToAdd); उपयोग कर सकते हैं इस जोड़े जाने से अशक्त तत्वों को रोकने जाएगा। सूची बनाने के दौरान यह केवल काम करता है। आप कहीं और से सूची प्राप्त करने और सूची का उपयोग करने से पहले सभी गैर-शून्य तत्वों को निकालना चाहते हैं, तो 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) यदि आप अपना प्रश्न पूछना चाहते हैं। एक प्रश्न का उत्तर देने का मतलब है कि एक सवाल का जवाब देना, अभी तक एक और सवाल नहीं पूछना। –

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