প্রদত্ত সংখ্যক উপাদানের একটি তালিকা কেটে দিন


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
প্রশ্নটি হুবহু পরিষ্কার না থাকলেও এটি এমনভাবে শোনাচ্ছে যে স্যাম মুছে ফেলা তালিকার সমাপ্তি চায়। সুতরাং আপনার উত্তরে একটি তালিকা অন্তর্ভুক্ত করা উচিত।
এমপি।

এটি করিম's's এর সমাধানের পাশাপাশি পারফরম্যান্সের সম্ভাবনা নেই যা সর্বোত্তম বিকল্প - এটির মধ্যে ভাল পারফরম্যান্সের সর্বোত্তম সম্ভাবনা রয়েছে এবং এটিও সবচেয়ে পরিষ্কার কোড।
লরেন্স ডল

আমি মনে করি এটি মুছে
ফেলার

1
যদি জাভা 8 একটি বিকল্প হয়, আমার মনে Stream.limitহয় ট্রিকটি করা উচিত ( ডকস.ওরাকল.com / javase/8 / docs / api / java / util / stream/… )
মেডান

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
গিউরি 18

আপনি যদি তালিকার প্রাথমিক এন উপাদানগুলি রাখতে চান তবে তা হওয়া উচিতlist.subList(n, list.size()).clear();
চাকলাদার আসফাক আরেফি

1
লজ্জাজনকভাবে আপনাকে কেবল একটি তালিকা ছোট করার জন্য একটি অবজেক্ট তৈরি করতে হবে
ডেভিড ব্র্যাডলি

1
@ ডেভিডব্রেডলি সত্য তবে হটস্পট আসলে এটিকে অপ্টিমাইজ করতে পারে
স্টিফান রেইচ

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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.