तत्वों की दी गई संख्या के लिए एक सूची को काटें


120

क्या विधि किसी सूची को काटती है - उदाहरण के लिए पहले 100 तत्वों के लिए - दूसरों को त्यागना (व्यक्तिगत तत्वों के माध्यम से पुनरावृत्ति के बिना)?

जवाबों:


141

उपयोग करें List.subList:

import java.util.*;
import static java.lang.Math.min;

public class T {
  public static void main( String args[] ) {
    List<String> items = Arrays.asList("1");
    List<String> subItems = items.subList(0, min(items.size(), 2));

    // Output: [1]
    System.out.println( subItems );

    items = Arrays.asList("1", "2", "3");
    subItems = items.subList(0, min(items.size(), 2));

    // Output: [1, 2]
    System.out.println( subItems );
  }
}

आपको यह ध्यान में रखना चाहिए कि subListवस्तुओं का एक दृश्य लौटाता है, इसलिए यदि आप चाहते हैं कि शेष सूची कचरा संग्रहण के योग्य हो, तो आपको उन वस्तुओं की प्रतिलिपि बनानी चाहिए जिन्हें आप नए में बनाना चाहते हैं List:

List<String> subItems = new ArrayList<String>(items.subList(0, 2));

यदि सूची निर्दिष्ट आकार से छोटी है, तो सीमा अपवाद से बाहर निकलने की अपेक्षा करें । अंतिम इंडेक्स के रूप में वांछित आकार और सूची के वर्तमान आकार का न्यूनतम मूल्य चुनें।

अंत में, ध्यान दें कि दूसरा तर्क अंतिम वांछित सूचकांक से एक अधिक होना चाहिए।


1
हालांकि यह सवाल बिल्कुल स्पष्ट नहीं है, यह ध्वनि करता है जैसे सैम हटाए गए सूची का अंत चाहता है। इसलिए आपके उत्तर में list.clear () शामिल होना चाहिए।
एम.पी.

यह karim79 के समाधान के रूप में अच्छी तरह से प्रदर्शन करने की संभावना नहीं है, जो सबसे अच्छा विकल्प है - इसमें अच्छा प्रदर्शन करने का सबसे अच्छा मौका है और यह सबसे साफ कोड भी है।
लॉरेंस Dol

मुझे लगता है कि यह निकाले जाने वाले तत्वों की संख्या पर निर्भर करता है (और यदि सूची संशोधन का समर्थन करता है)
बेन लिंग्स

1
यदि जावा 8 एक विकल्प है, तो मुझे लगता Stream.limitहै कि ट्रिक ( docs.oracle.com/javase/8/docs/api/java/util/stream/… ) करना चाहिए
Eran Medan

53
list.subList(100, list.size()).clear();

या:

list.subList(0, 100);

3
पहला विकल्प सूची को संशोधित करता है जबकि दूसरा नहीं करता है। यह list = list.subList(0, 100)
जोर से

3
इसके अलावा ध्यान दें कि subList(100, list.size()).clear()केवल होगा काम करता है, तो सूची उदाहरण के लिए, अपनी स्पष्ट विधि लागू है अगर तुम बनाने के listद्वारा List<String> list = Arrays.asList(someString.split(","));स्पष्ट () फेंक देते हैं UnsupportedOperationExceptionके बाद से listएक सार हो जाएगा List
ग्युरि

यदि आप सूची के प्रारंभिक n तत्वों को रखना चाहते हैं, तो यह होना चाहिएlist.subList(n, list.size()).clear();
चाकलेदर असफाक आरिफ

1
शर्म करो आपको सिर्फ एक सूची को छोटा करने के लिए एक ऑब्जेक्ट बनाना होगा
डेविड ब्रैडली

1
@DavidBradley ट्रू लेकिन हॉटस्पॉट वास्तव में इसे दूर कर सकता है
स्टीफन रीच

8

subList, जैसा कि अन्य उत्तरों में सुझाया गया है, वह पहला है जो दिमाग में आता है। मैं एक स्ट्रीम अप्रोच भी सुझाऊंगा ।

source.stream().limit(10).collect(Collectors.toList()); // truncate to first 10 elements
source.stream().skip(2).limit(5).collect(Collectors.toList()); // discards the first 2 elements and takes the next 5
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.