এক লাইনে একটি অ্যারেলিস্টের সূচনা


2751

আমি পরীক্ষার উদ্দেশ্যে বিকল্পগুলির একটি তালিকা তৈরি করতে চেয়েছিলাম। প্রথমে, আমি এটি করেছি:

ArrayList<String> places = new ArrayList<String>();
places.add("Buenos Aires");
places.add("Córdoba");
places.add("La Plata");

তারপরে, আমি কোডটি নিম্নরূপে রিফ্যাক্টর করেছি:

ArrayList<String> places = new ArrayList<String>(
    Arrays.asList("Buenos Aires", "Córdoba", "La Plata"));

এই কাজ করতে একটি ভাল উপায় আছে কি?


34
যদি এটি ইউনিট পরীক্ষার উদ্দেশ্যে করা হয়, তবে দোলের জন্য গ্রোভির চেষ্টা করুন। জাভা কোডটি পরীক্ষার সময় আপনি এতে নিজের টেস্ট কোডটি লিখতে পারেন এবং ব্যবহার করতে পারেনArrasyList<String> places = ["Buenos Aires", "Córdoba", "La Plata"]
ripper234

3
জাভা এসই 7-তে, আপনি নির্মাতার পরামিতি ধরনের ধরণের পরামিতিগুলির একটি খালি সেট (<>) দিয়ে প্রতিস্থাপন করতে পারেন: মানচিত্র <স্ট্রিং, তালিকা <স্ট্রিং>> মাইম্যাপ = নতুন হ্যাশম্যাপ <> ();
রোজ


2
ডাবল ব্র্যাকিং সূচনা ব্যবহার করুন :)
মোহাম্মদরেজা খাতামি

8
স্ট্রিম.ওফ ("ভাল 1", "ভাল 2") সংগ্রহ করুন (সংগ্রাহক। টোলিস্ট ()); // অ্যারেলিস্ট তৈরি করে, জাভা 8 সমাধান।
টোরিনা

উত্তর:


2021

প্রকৃতপক্ষে, সম্ভবত এটি শুরু করার "সেরা" উপায়টি ArrayListআপনি লিখেছেন এমন পদ্ধতি যা কোনওভাবেই নতুন তৈরি করার দরকার নেই List:

ArrayList<String> list = new ArrayList<String>();
list.add("A");
list.add("B");
list.add("C");

ক্যাচটি হ'ল সেই listউদাহরণটি উল্লেখ করার জন্য বেশ কিছুটা টাইপ করা দরকার ।

বিকল্প রয়েছে, যেমন একটি ইনসেন্ট ইনিশিয়ালাইজার (একটি "ডাবল ব্রেস ইনিশিয়ালাইজেশন" হিসাবে পরিচিত) দিয়ে বেনামে অভ্যন্তরীণ শ্রেণি তৈরির মতো:

ArrayList<String> list = new ArrayList<String>() {{
    add("A");
    add("B");
    add("C");
}};

যাইহোক, আমি সেই পদ্ধতির খুব পছন্দ করি না কারণ আপনি যা শেষ করেন তা হ'ল একটি সাবক্লাস ArrayListযার একটি উদাহরণ সূচনা হয় এবং সেই শ্রেণিটি কেবল একটি অবজেক্ট তৈরির জন্য তৈরি করা হয়েছিল - এটি আমার কাছে কিছুটা ওভারকিলের মতো মনে হয়।

প্রজেক্ট কয়েনের জন্য কালেকশন লিটারালসের প্রস্তাব যদি গৃহীত হয় (তবে এটি জাভা 7-তে প্রবর্তিত হবে, তবে এটি জাভা ৮-এর অংশ হওয়ার সম্ভাবনা নেই) কী চমৎকার হত!

List<String> list = ["A", "B", "C"];

দুর্ভাগ্যক্রমে এটি আপনাকে এখানে সহায়তা করবে না, কারণ এটি একটি Listপরিবর্তে এক অস্থাবর আরম্ভ করবে ArrayListএবং তদ্ব্যতীত, এটি এখনও পাওয়া যায় না, যদি এটি কখনও হয় তবে।


172
ডাবল-ব্রেস প্রারম্ভিককরণ, উপকারিতা এবং কনস সম্পর্কে আরও তথ্যের জন্য স্ট্যাকওভারফ্লো.com/ প্রশ্নগুলি / 924285 দেখুন ।
এডি

6
@ এডি: লিঙ্কটির জন্য ভাল কল - ডাবল-ব্রেস প্রারম্ভিককরণের একটি বাক্য সম্পূর্ণরূপে বর্ণনা করার জন্য এটি যথেষ্ট নয়।
কবিবার্ড

2
আপনি যদি অটো বক্সিং তালিকার উপর নির্ভর না করেন কেবল তখনই কাজ করে <ডাবল> তালিকা = [1.0, 2.0, 3.0]; ব্যর্থ।
রিচার্ড বি

1
আপনি ডাবল-লিস্ট ইনিশিয়ালেশনে একটি সেমিকোলন মিস করছেন
ডন ল্যারিনেক্স 12'15

6
যেহেতু এই উত্তরটি সর্বাধিক উর্ধ্বমুখী এবং উল্লিখিত প্রকল্পের মুদ্রা, আমি মনে করি আপনার কাছে জাভা 9 নাম্বারটি লিস্ট.ওফ (...) সিনট্যাক্স সহ প্রেরণ করা উচিত: ডকস.ওরকল /
আসফ

2153

আপনি যদি এটিকে কেবল একটি হিসাবে ঘোষণা করেন তবে এটি সহজ হবে List- এটি একটি অ্যারেলিস্ট হতে হবে?

List<String> places = Arrays.asList("Buenos Aires", "Córdoba", "La Plata");

বা যদি আপনার কেবলমাত্র একটি উপাদান থাকে:

List<String> places = Collections.singletonList("Buenos Aires");

এর অর্থ placesহ'ল অপরিবর্তনীয় (এটিকে পরিবর্তনের চেষ্টা করার ফলে UnsupportedOperationExceptionব্যতিক্রম ছুঁড়ে ফেলা হবে)।

পরিবর্তনীয় তালিকাকে একটি কংক্রিট হিসাবে ArrayListতৈরি করতে আপনি ArrayListঅপরিবর্তনীয় তালিকা থেকে তৈরি করতে পারেন :

ArrayList<String> places = new ArrayList<>(Arrays.asList("Buenos Aires", "Córdoba", "La Plata"));

18
@ মারকেজ: আপনি অ্যারেলিস্টের পরিবর্তে কোনও তালিকা ব্যবহার করতে নিজের শ্রেণি পরিবর্তন করতে পারবেন না?
লরেন্স ডল

74
আমার উত্তর অনুসারে, আপনি যদি সুনির্দিষ্ট পদ্ধতি ব্যবহার না করেন ArrayListতবে ঘোষণাকে পরিবর্তিত করার জন্য এটি আরও ভাল নকশা হবে List। ইন্টারফেস উল্লেখ করুন, বাস্তবায়ন নয়।
ক্রিস্টোফার হামারস্ট্রিম

9
@ ক্রিসটফার হামারস্ট্রিম: যদি তিনি ঘোষণাতে তালিকা পরিবর্তন করেন এবং তালিকাটি ব্যবহার করেন <স্ট্রিং> স্থানগুলি = অ্যারে.এএসলিস্ট (...); তিনি ব্যবহার করতে সক্ষম হবেন না places.add ( "blabla")
maks

57
কেবল স্পষ্ট করে বলতে গেলে, asList(...)একটি স্থির আকার দেয় Listযা পরিবর্তনের ক্রিয়াকলাপগুলিতে ফুটে ওঠে removeএবং চুক্তিতে যে সমস্ত clearজিনিস Listসমর্থন করে বলে দাবি করে। এমনকি যদি আপনি ঘোষণাটি ত্যাগ করেন List, এমনকি List l = new ArrayList(asList(...))অপারেশনটনসপোর্টেড ব্যতিক্রমগুলি ছুঁড়ে না এমন কোনও বস্তু পেতে আপনাকে সিল ব্যবহার করতে হবে। লিসকভ সাবস্টিটিউশন নীতিমালা কেউ?
স্প্ল্যাশ

4
@ স্প্ল্যাশ: removeএবং এতে alচ্ছিক clearঅপারেশন রয়েছে List, সুতরাং asList(...)চুক্তিটি অনুসরণ করে। ওপিতে কোথাও বলা হয়নি যে তাকে পরে আরও উপাদান যুক্ত করতে হবে, উদাহরণটি কেবল একটি Listউপাদান যা তিনটি উপাদান দিয়ে শুরু করা দরকার।
ক্রিস্টোফার হ্যামারস্ট্রিম

869

সহজ উত্তর

ইন জাভা 9 বা পরবর্তী পর List.of()যোগ করা হয়েছিল:

List<String> strings = List.of("foo", "bar", "baz");

সঙ্গে জাভা 10 বা পরে সঙ্গে, এই সংক্ষিপ্ত করা যেতে পারে varশব্দ।

var strings = List.of("foo", "bar", "baz");

এই আপনি একটি দেব অপরিবর্তনীয় List , তাই এটি পরিবর্তন করা যাবে না।
আপনি যেখানে প্রিপোপুলেশন করছেন বেশিরভাগ ক্ষেত্রে আপনি যা চান তা চাই।


জাভা 8 বা তার আগের:

List<String> strings = Arrays.asList("foo", "bar", "baz");

এটি আপনাকে Listঅ্যারে দ্বারা ব্যাকড দেবে , সুতরাং এটি দৈর্ঘ্য পরিবর্তন করতে পারে না।
তবে আপনি কল করতে পারেন List.set, সুতরাং এটি এখনও পরিবর্তনযোগ্য


আপনি Arrays.asListএকটি স্ট্যাটিক আমদানি দিয়ে আরও খাটো করতে পারেন :

List<String> strings = asList("foo", "bar", "baz");

স্থিতিশীল আমদানি:

import static java.util.Arrays.asList;  

যে কোনও আধুনিক আইডিই আপনাকে পরামর্শ দেবে এবং স্বয়ংক্রিয়ভাবে আপনার জন্য করবে।
উদাহরণস্বরূপ ইন্টেলিজ আইডিইএতে আপনি টিপুন Alt+Enterএবং নির্বাচন করুন Static import method...


তবে আমি List.ofপদ্ধতিটি ছোট করার প্রস্তাব দিচ্ছি না of, কারণ এটি বিভ্রান্তিকর হয়ে ওঠে becomes
List.ofইতিমধ্যে যথেষ্ট সংক্ষিপ্ত এবং ভাল পড়া।


ব্যবহার করে Streamএস

কেন এটি হতে হবে List?
জাভা 8 বা তার পরে আপনি Streamআরও নমনীয় একটি ব্যবহার করতে পারেন :

Stream<String> strings = Stream.of("foo", "bar", "baz");

আপনি Streamগুলি যোগ করতে পারেন :

Stream<String> strings = Stream.concat(Stream.of("foo", "bar"),
                                       Stream.of("baz", "qux"));

অথবা আপনি একটি থেকে যেতে পারেন Streamএকটি থেকে List:

import static java.util.stream.Collectors.toList;

List<String> strings = Stream.of("foo", "bar", "baz").collect(toList());

কিন্তু বাঞ্ছনীয়, শুধু ব্যবহার Streamএকটি এটি সংগ্রহ করা ছাড়া List


আপনার যদি সত্যই বিশেষত প্রয়োজন হয়java.util.ArrayList

(আপনি সম্ভবত না।) জেপ 269 (জোর আমার)
উদ্ধৃতি :

একটা হল ছোট সেট মূল্যবোধের একটি পূর্বনির্ধারিত সেট দিয়ে একটি চপল সংগ্রহ উদাহরণস্বরূপ আরম্ভের জন্য ব্যবহারে ক্ষেত্রে। এই পূর্বনির্ধারিত মানগুলি একটি অপরিবর্তনীয় সংগ্রহের মধ্যে থাকা এবং তারপরে অনুলিপি সংগ্রহের মাধ্যমে অনুলিপি সংগ্রহের মাধ্যমে প্রাথমিকভাবে শুরু করা ভাল।


আপনি যদি উভয়ই একটি প্রিপোপুলেট করতে চান ArrayList এবং তারপরে (কেন?) যুক্ত করতে চান, ব্যবহার করুন

ArrayList<String> strings = new ArrayList<>(List.of("foo", "bar"));
strings.add("baz");

বা জাভা 8 বা তার আগের:

ArrayList<String> strings = new ArrayList<>(asList("foo", "bar"));
strings.add("baz");

বা ব্যবহার Stream:

import static java.util.stream.Collectors.toCollection;

ArrayList<String> strings = Stream.of("foo", "bar")
                             .collect(toCollection(ArrayList::new));
strings.add("baz");

তবে আবার এটি Streamএটিকে সংগ্রহ করার পরিবর্তে সরাসরি ব্যবহার করা ভাল List


ইন্টারফেস প্রোগ্রাম, বাস্তবায়ন না

আপনি বলেছিলেন যে আপনি তালিকাটিকে ArrayListআপনার কোড হিসাবে একটি হিসাবে ঘোষণা করেছেন , তবে আপনি কেবল তখনই তা করা উচিত যদি আপনি ArrayListএর মধ্যে নেই এমন কোনও সদস্য ব্যবহার করছেন List

যা আপনি সম্ভবত করছেন না।

সাধারণত আপনি শুধু সবচেয়ে সাধারণ ইন্টারফেস আপনার ব্যবহারের জন্য যাচ্ছি (যেমন দ্বারা ভেরিয়েবল ডিক্লেয়ার করা উচিত Iterable, Collectionঅথবা List(যেমন), এবং তাদের নির্দিষ্ট বাস্তবায়ন আরম্ভ ArrayList, LinkedListবা Arrays.asList())।

অন্যথায় আপনি আপনার কোডটিকে সেই নির্দিষ্ট ধরণের মধ্যে সীমাবদ্ধ করছেন এবং আপনি যখন চান তখন এটি পরিবর্তন করা আরও শক্ত হবে।

উদাহরণস্বরূপ, যদি আপনি একটি পার করছি ArrayListএকটি থেকে void method(...):

// Iterable if you just need iteration, for (String s : strings):
void method(Iterable<String> strings) { 
    for (String s : strings) { ... } 
}

// Collection if you also need .size(), .isEmpty(), or .stream():
void method(Collection<String> strings) {
    if (!strings.isEmpty()) { strings.stream()... }
}

// List if you also need .get(index):
void method(List<String> strings) {
    strings.get(...)
}

// Don't declare a specific list implementation
// unless you're sure you need it:
void method(ArrayList<String> strings) {
    ??? // You don't want to limit yourself to just ArrayList
}

অন্য একটি উদাহরণ সর্বদা পরিবর্তনশীল হিসাবে ঘোষিত InputStreamহবে যদিও এটি সাধারণত এক FileInputStreamবা একটি হয় BufferedInputStream, কারণ একদিন শীঘ্রই আপনি বা অন্য কেউ অন্য কোনও ধরণের ব্যবহার করতে চাইবেন InputStream


3
@ জলিরোগার: Arrays.asListএকটি স্থির পদ্ধতি। ডকস.ওরকল
ক্রিস্টোফার হ্যামারস্ট্রিম

2
@ ক্রিস্টোফারহ্যামারস্ট্রিম সেই ক্ষেত্রে, আমার নবীন মন আমাকে বলে যে স্ট্যাটিক আমদানি বিশ্বব্যাপী পরিবর্তনশীল এবং এই জাতীয় ব্যবহারের সাথে সম্পর্কিত বিপদগুলির সাথে দৃ strong় সাদৃশ্য রাখে। এই ধারণাটি কি সঠিক এবং এটিও কি উপরের অনুরূপ উত্তরের আরও বেশি ভোট পাওয়ার কারণ?
jollyroger

2
উপরের উত্তরটি আমার মনে হয় আপনি যে বিষয়ে কথা বলছেন তা এক বছর আগে তৈরি হয়েছিল। এবং না, গ্লোবাল ভেরিয়েবলগুলির সমস্যা হ'ল তারা পরিবর্তনযোগ্য। স্থির আমদানির সাথে তাদের কোনও যোগসূত্র নেই।
ক্রিস্টোফার হামারস্ট্রিম

2
আপনি যদি স্থির আমদানি না চান তবে আপনি স্থিতিক asList পদ্ধতির পুরো পথটি সংজ্ঞায়িত করতে পারেন, যেমন: তালিকা <স্ট্রিং> স্ট্রিংস = java.util.Arrays.asList ("", "");
জির্ট ওয়েইন

2
অথবা আপনি java.util.Arrays আমদানি করতে পারেন; এবং অ্যারে.এএসলিস্ট ("", ""); আপনাকে কোনও স্ট্যাটিক আমদানি ব্যবহার করতে হবে না। আপনাকে একটি পুরো পথ ব্যবহার করতে হবে না। স্থিতিশীল পদ্ধতিগুলি আমদানির বিষয়ে চিন্তা করে না। আপনি যদি এটির সন্ধানের জন্য কোনও উদাহরণ ব্যবহার করেন তবে তারা বিরক্ত হবে।
candied_orange

111

আপনার যদি আকার 1 এর একটি সাধারণ তালিকা প্রয়োজন:

List<String> strings = new ArrayList<String>(Collections.singletonList("A"));

আপনার যদি বেশ কয়েকটি অবজেক্টের একটি তালিকা প্রয়োজন:

List<String> strings = new ArrayList<String>();
Collections.addAll(strings,"A","B","C","D");

57

সঙ্গে পেয়ারা আপনি লিখতে পারেন:

ArrayList<String> places = Lists.newArrayList("Buenos Aires", "Córdoba", "La Plata");

পেয়ারাতে আরও কার্যকর স্ট্যাটিক কনস্ট্রাক্টর রয়েছে। আপনি তাদের সম্পর্কে এখানে পড়তে পারেন ।


1
আমি নিশ্চিত যে আপনি ঠিক java.util.Arraysযেমন যেমনটি করতে পারেনList<String> names = Arrays.asList("Beckah", "Sam", "Michael");
বেকাহ

2
@beckah পদ্ধতি Arrays.asLists প্রকারের তালিকা বস্তুর সৃষ্টি, যখন প্রশ্ন ArrayList সৃষ্টির মাঝেই
Pawel Adamski


34

সংগ্রহের আক্ষরিকাগুলি এটি জাভা 8 তে পরিণত করেনি, তবে স্ট্রিম এপিআই ব্যবহার করে একটি দীর্ঘ লাইনে একটি তালিকা শুরু করার পক্ষে এটি সম্ভব:

List<String> places = Stream.of("Buenos Aires", "Córdoba", "La Plata").collect(Collectors.toList());

আপনি যদি নিশ্চিত হন যে আপনার Listএটির একটি ArrayList:

ArrayList<String> places = Stream.of("Buenos Aires", "Córdoba", "La Plata").collect(Collectors.toCollection(ArrayList::new));

34

সঙ্গে এবং উপরে, জেপ 269-তে প্রস্তাবিত হিসাবে : সংগ্রহের জন্য সুবিধাজনক কারখানার পদ্ধতিগুলি , এখন সংগ্রহের আক্ষরিক সাহায্যে এটি অর্জন করা যেতে পারে -

List<String> list = List.of("A", "B", "C");

Set<String> set = Set.of("A", "B", "C");

একই ধরণের পদ্ধতির প্রয়োগও হবে Map-

Map<String, String> map = Map.of("k1", "v1", "k2", "v2", "k3", "v3")

যা কালেকশন লিটারালসের প্রস্তাবের মতো, যেমনটি @ কুলবার্ড বলেছেন। জেপি-তে আরও স্পষ্ট করা হয়েছে -


বিকল্প

ভাষার পরিবর্তনগুলি বেশ কয়েকবার বিবেচনা করা হয়েছে, এবং প্রত্যাখ্যান করা হয়েছে:

প্রকল্পের মুদ্রার প্রস্তাব, ২৯ শে মার্চ ২০০৯

প্রকল্পের মুদ্রার প্রস্তাব, ৩০ মার্চ ২০০৯

লাম্বদা-দেব, জেআইপি 186 আলোচনা, জানুয়ারি-মার্চ 2014

ভাষা প্রস্তাবগুলি এই বার্তায় সংক্ষিপ্তসার হিসাবে একটি লাইব্রেরি ভিত্তিক প্রস্তাবকে অগ্রাধিকার হিসাবে সেট করা হয়েছিল

সম্পর্কিত: জাভা 9-তে সংগ্রহের জন্য ওভারলোডেড সুবিধাদি কারখানার পদ্ধতিগুলির বিন্দুটি কী


31
import com.google.common.collect.ImmutableList;

....

List<String> places = ImmutableList.of("Buenos Aires", "Córdoba", "La Plata");

4
আমি এটি করতে একটি নতুন নির্ভরতা যুক্ত করতে চাই না।
ম্যাকার্সে

6
যেমন যে একই Collections.unmodifiableList(Arrays.asList("Buenos Aires", "Córdoba", "La Plata")), যা হয়ে unmodifiableList(asList("Buenos Aires", "Córdoba", "La Plata"))স্ট্যাটিক আমদানির সঙ্গে। এর জন্য আপনার Google সংগ্রহের দরকার নেই।
ক্রিস্টোফার হামারস্ট্রিম

9
না, এটি একরকম নয়। যেহেতু অপরিবর্তনযোগ্য তালিকাটি এটিকে একটি সাধারণ তালিকা হিসাবে উপস্থাপন করে তখন ইমামট্যাবললিস্ট ফলাফলের ধরণে তার অপরিবর্তনযোগ্যতা নথিভুক্ত করে।
ডেভিড

2
অপরিবর্তনীয় একের পরিবর্তে, গুগল সংগ্রহগুলিও পারস্পরিক পরিবর্তনযোগ্য অ্যারে তালিকা সরবরাহ করে: তালিকা <স্ট্রিং> = তালিকা.নিউআরএলিস্ট ("বুয়েনস আইরেস", "কর্ডোবা", "লা প্লাটা");
এল। হল্যান্ডা

3
আপনি এটি গ্রহণ করে যাচ্ছেন এমন ImmutableListঅন্যান্য পদ্ধতিতে যা একটি গ্রহণ করে Listএবং তারপরে আপনি যেভাবে ডকুমেন্টেশনটি হারিয়ে ফেলেছেন।
ক্রিস্টোফার হামারস্ট্রিম

23

আপনি একটি কারখানা পদ্ধতি তৈরি করতে পারেন:

public static ArrayList<String> createArrayList(String ... elements) {
  ArrayList<String> list = new ArrayList<String>();
  for (String element : elements) {
    list.add(element);
  }
  return list;
}

....

ArrayList<String> places = createArrayList(
  "São Paulo", "Rio de Janeiro", "Brasília");

তবে এটি আপনার প্রথম রিফ্যাক্টরিংয়ের চেয়ে বেশি ভাল নয়।

বৃহত্তর নমনীয়তার জন্য, এটি জেনেরিক হতে পারে:

public static <T> ArrayList<T> createArrayList(T ... elements) {
  ArrayList<T> list = new ArrayList<T>();
  for (T element : elements) {
    list.add(element);
  }
  return list;
}

1
মূল পোস্টটি ফিরে দেখুন, এটি 7 লাইন নয়, এক লাইনে অ্যারে প্রারম্ভিককরণের জন্য জিজ্ঞাসা করছে ।
এল। হল্যান্ড

7
@ লিওহোল্যান্ডা: প্রতিটি ছোট জিনিসের জন্য কারখানার পদ্ধতি তৈরি করা অনেক বেশি, আমি সম্মত। তবে পরিস্থিতি এবং সেই পদ্ধতিটি যে কতবার ব্যবহার করা হচ্ছে তার উপর নির্ভর করে এটি তৈরির জন্য এটি বোধগম্য হতে পারে। অতিরিক্ত বিমূর্ত স্তর তৈরির অর্থ ডিজাইনারের অভিপ্রায়কে আরও বেশি অর্থপূর্ণ পদ্ধতি তৈরি করে জটিলতা সরিয়ে ফেলা
জর্দো

16

জাভা 9 তে আমরা সহজেই ArrayListএকটি একক লাইনে একটি সূচনা করতে পারি :

List<String> places = List.of("Buenos Aires", "Córdoba", "La Plata");

অথবা

List<String> places = new ArrayList<>(List.of("Buenos Aires", "Córdoba", "La Plata"));

জাভা 9 এর এই নতুন পদ্ধতির পূর্ববর্তীগুলির তুলনায় অনেক সুবিধা রয়েছে:

  1. স্থান দক্ষতা
  2. অপরিবর্তনীয়তা
  3. শংকা মুক্ত

আরও বিশদের জন্য এই পোস্টটি দেখুন -> List.of এবং অ্যারে.এএসলিস্টের মধ্যে পার্থক্য কী?


8

এটি করার সবচেয়ে কমপ্যাক্ট উপায় সম্পর্কে:

Double array[] = { 1.0, 2.0, 3.0};
List<Double> list = Arrays.asList(array);

8

কেবল নীচে কোডের নীচে ব্যবহার করুন।

List<String> list = new ArrayList<String>() {{
            add("A");
            add("B");
            add("C");
}};

2
@bsd আপনি কোনও পদ্ধতি প্রবেশের আগে তালিকাটি ঘোষণা করতে এই পদ্ধতিটি ব্যবহার করতে পারেন। সুতরাং শ্রেণি ভেরিয়েবলগুলি সংজ্ঞায়িত করার সময় সামগ্রীটি তালিকার সাথে এটি করার জন্য কোনও পদ্ধতি না চাওয়ার সাথে যোগ করা যেতে পারে।
ময়ুইল

2
ডাবল বন্ধনী সূচনা যতদূর সম্ভব এড়ানো উচিত। দেখুন: stackoverflow.com/a/924326/760393
রাউল

8

সঙ্গে অন্ধকার সংগ্রহগুলি আপনাকে নিম্নলিখিত লিখতে পারেন:

List<String> list = Lists.mutable.with("Buenos Aires", "Córdoba", "La Plata");

প্রকারভেদগুলি এবং সেগুলি পরিবর্তনযোগ্য বা অপরিবর্তনীয় কিনা সে সম্পর্কে আপনি আরও সুনির্দিষ্ট হতে পারেন।

MutableList<String> mList = Lists.mutable.with("Buenos Aires", "Córdoba", "La Plata");
ImmutableList<String> iList = Lists.immutable.with("Buenos Aires", "Córdoba", "La Plata");

আপনি সেট এবং ব্যাগ দিয়েও এটি করতে পারেন:

Set<String> set = Sets.mutable.with("Buenos Aires", "Córdoba", "La Plata");
MutableSet<String> mSet = Sets.mutable.with("Buenos Aires", "Córdoba", "La Plata");
ImmutableSet<String> iSet = Sets.immutable.with("Buenos Aires", "Córdoba", "La Plata");

Bag<String> bag = Bags.mutable.with("Buenos Aires", "Córdoba", "La Plata");
MutableBag<String> mBag = Bags.mutable.with("Buenos Aires", "Córdoba", "La Plata");
ImmutableBag<String> iBag = Bags.immutable.with("Buenos Aires", "Córdoba", "La Plata");

দ্রষ্টব্য: আমি গ্রহগ্রাহ সংগ্রহের প্রতিশ্রুতিবদ্ধ।



7

(একটি মন্তব্য হওয়া উচিত, তবে খুব দীর্ঘ, তাই নতুন উত্তর)। অন্যরা Arrays.asListযেমন বলেছে, পদ্ধতিটি নির্দিষ্ট আকারের, তবে এটি কেবল এটিই একমাত্র সমস্যা নয়। এটি উত্তরাধিকার খুব ভাল পরিচালনা করে না। উদাহরণস্বরূপ, ধরুন আপনার নিম্নলিখিতগুলি রয়েছে:

class A{}
class B extends A{}

public List<A> getAList(){
    return Arrays.asList(new B());
}

সংকলক ত্রুটির উপরোক্ত ফলাফলগুলি, কারণ List<B>(যা অ্যারেজ.এললিস্ট দ্বারা ফিরে আসে) এটি একটি সাবক্লাস নয় List<A>, যদিও আপনি কোনও List<A>বস্তুতে বি টাইপের অবজেক্ট যুক্ত করতে পারেন । এটি কাছাকাছি পেতে আপনার কিছু করতে হবে:

new ArrayList<A>(Arrays.<A>asList(b1, b2, b3))

এটি সম্ভবত এটি করার সবচেয়ে ভাল উপায়, esp। আপনার যদি আনবাউন্ডেড তালিকার প্রয়োজন হয় বা উত্তরাধিকার ব্যবহারের প্রয়োজন হয়।


6

আপনি নীচের বিবৃতি ব্যবহার করতে পারেন:

টুকিটাকি সংকেতলিপি:

String [] arr = {"Sharlock", "Homes", "Watson"};

List<String> names = Arrays.asList(arr);

কমপ্যাক্ট সমাধানের জন্য আপনি প্রথম প্রকাশটি ইনলাইন করতে পারেন:letters = Arrays.asList(new String[]{"A", "B", "C"});
পাভেল রেপিন

5

টম যেমন বলেছেন :

List<String> places = Arrays.asList("Buenos Aires", "Córdoba", "La Plata");

তবে যেহেতু আপনি একটি অ্যারেলিস্ট চান না বলে অভিযোগ করেছেন, আপনার প্রথমে জানা উচিত যে অ্যারেলিস্টটি তালিকার একটি সাবক্লাস এবং আপনি কেবল এই লাইনটি যুক্ত করতে পারেন:

ArrayList<String> myPlaces = new ArrayList(places);

যদিও, এটি আপনাকে 'পারফরম্যান্স' সম্পর্কে অভিযোগ করতে পারে।

সেক্ষেত্রে এটি আমার কাছে বোধগম্য নয়, কেন, যেহেতু আপনার তালিকাটি পূর্বনির্ধারিত তাই এটি অ্যারে হিসাবে সংজ্ঞায়িত হয়নি (যেহেতু আকারটি আরম্ভের সময় জানা যায়)। এবং যদি এটি আপনার জন্য একটি বিকল্প:

String[] places = {"Buenos Aires", "Córdoba", "La Plata"};

আপনি যদি সামান্য পারফরম্যান্সের পার্থক্যগুলি যত্ন না করেন তবে আপনি খুব সহজেই একটি অ্যারেলিস্টে একটি অ্যারে অনুলিপি করতে পারেন:

ArrayList<String> myPlaces = new ArrayList(Arrays.asList(places));

ঠিক আছে, তবে ভবিষ্যতে আপনার কেবল স্থানের নামের চেয়ে কিছুটা বেশি প্রয়োজন, আপনার একটি দেশ কোডও দরকার। ধরে নেওয়া এই এখনও পূর্বনির্ধারিত তালিকা যা রান-টাইমের সময় কখনও বদলাবে না, তারপরে এটি একটি enumসেট ব্যবহার করা উপযুক্ত , যা ভবিষ্যতে তালিকাটি পরিবর্তন করার প্রয়োজন হলে পুনরায় সংকলন প্রয়োজন।

enum Places {BUENOS_AIRES, CORDOBA, LA_PLATA}

হবে:

enum Places {
    BUENOS_AIRES("Buenos Aires",123),
    CORDOBA("Córdoba",456),
    LA_PLATA("La Plata",789);

    String name;
    int code;
    Places(String name, int code) {
      this.name=name;
      this.code=code;
    }
}

এনুমের একটি স্থিতিশীল valuesপদ্ধতি রয়েছে যা এনামের যে মানগুলি ঘোষিত হয় সেভাবে তার সমস্ত মান সমেত একটি অ্যারের ফিরিয়ে দেয় eg

for (Places p:Places.values()) {
    System.out.printf("The place %s has code %d%n",
                  p.name, p.code);
}

সেক্ষেত্রে আমি অনুমান করি আপনার আরেলিস্টের দরকার নেই।

দ্রষ্টব্য Randyaa প্রদর্শিত স্ট্যাটিক ইউটিলিটি পদ্ধতির সাহায্যে আরেকটি সুন্দর ভাবে Collections.addAll


5

অপরিবর্তনীয় তালিকা তৈরি করতে জাভা 9 -এর নিম্নলিখিত পদ্ধতি রয়েছে :

List<String> places = List.of("Buenos Aires", "Córdoba", "La Plata");

যা প্রয়োজন হলে সহজেই পরিবর্তনীয় তালিকা তৈরি করতে মানিয়ে নেওয়া হয়:

List<String> places = new ArrayList<>(List.of("Buenos Aires", "Córdoba", "La Plata"));

অনুরূপ পদ্ধতিগুলি Setএবং এর জন্য উপলব্ধ Map


1
এটি ভাল যে আপনি স্পষ্টভাবে "অপরিবর্তনীয় তালিকা" বলেছিলেন এবং তারপরে পরিবর্তনীয় তালিকার আরও একটি উদাহরণ দেখিয়েছেন কারণ এটি কখন পরিষ্কার করতে পারে তা পরিষ্কার করে দেয়।
চেরিট





2

জাভাতে, আপনি পারবেন না

ArrayList<String> places = new ArrayList<String>( Arrays.asList("Buenos Aires", "Córdoba", "La Plata"));

যেমন নির্দেশিত হয়েছিল, আপনাকে একটি ডাবল ব্রেস প্রারম্ভিককরণ করতে হবে:

List<String> places = new ArrayList<String>() {{ add("x"); add("y"); }};

তবে এটি আপনাকে একটি টীকা যুক্ত করতে বাধ্য করতে পারে @SuppressWarnings("serial") বা একটি সিরিয়াল ইউআইডি তৈরি যা বিরক্তিকর। এছাড়াও বেশিরভাগ কোড বিন্যাসকগুলি এটিকে একাধিক বিবৃতি / লাইনে আনপ্রেপ করবে।

বিকল্পভাবে আপনি করতে পারেন

List<String> places = Arrays.asList(new String[] {"x", "y" });

তবে আপনি একটি করতে চাইতে পারেন @SuppressWarnings("unchecked")

জাভাডোক অনুসারে আপনার এটি করতে সক্ষম হওয়া উচিত:

List<String> stooges = Arrays.asList("Larry", "Moe", "Curly");

তবে আমি এটি জেডিকে 1.6 এর সাথে সংকলন করতে সক্ষম নই।


5
ভুল! আপনি প্রথম লাইনটি করতে পারেন , এবং এটি সঠিক উত্তর বিটিডব্লিউ
বোহেমিয়ান

1
Collections.singletonList(messageBody)

আপনার যদি একটি আইটেমের তালিকা থাকা দরকার !

সংগ্রহগুলি java.util প্যাকেজ থেকে ।


1

এটি করার সর্বোত্তম উপায়:

package main_package;

import java.util.ArrayList;


public class Stackkkk {
    public static void main(String[] args) {
        ArrayList<Object> list = new ArrayList<Object>();
        add(list, "1", "2", "3", "4", "5", "6");
        System.out.println("I added " + list.size() + " element in one line");
    }

    public static void add(ArrayList<Object> list,Object...objects){
        for(Object object:objects)
            list.add(object);
    }
}

কেবলমাত্র একটি ফাংশন তৈরি করুন যাতে আপনার ইচ্ছে মতো অনেকগুলি উপাদান থাকতে পারে এবং সেগুলিকে এক লাইনে যুক্ত করার জন্য কল করুন।


1
আপনি যদি সমস্ত সমস্যার মধ্য দিয়ে যান তবে আপনি এটিকে প্লেইন ব্যবহার না করে টেমপ্লেট পদ্ধতিতে পরিণত করতে পারেন Object
রবার্ট

1

AbacusUtil দ্বারা কোড এখানে

// ArrayList
List<String> list = N.asList("Buenos Aires", "Córdoba", "La Plata");
// HashSet
Set<String> set = N.asSet("Buenos Aires", "Córdoba", "La Plata");
// HashMap
Map<String, Integer> map = N.asMap("Buenos Aires", 1, "Córdoba", 2, "La Plata", 3);

// Or for Immutable List/Set/Map
ImmutableList.of("Buenos Aires", "Córdoba", "La Plata");
ImmutableSet.of("Buenos Aires", "Córdoba", "La Plata");
ImmutableSet.of("Buenos Aires", 1, "Córdoba", 2, "La Plata", 3);

// The most efficient way, which is similar with Arrays.asList(...) in JDK. 
// but returns a flexible-size list backed by the specified array.
List<String> set = Array.asList("Buenos Aires", "Córdoba", "La Plata");

ঘোষণা : আমি অ্যাবাকাসটিলের বিকাশকারী।


0

আমার জন্য অ্যারে.এএসলিস্ট () সেরা এবং সুবিধাজনক। আমি সর্বদা সেভাবে আরম্ভ করতে চাই। আপনি যদি জাভা সংগ্রহগুলিতে শিক্ষানবিশ হন তবে আমি আপনাকে অ্যারেলিস্ট প্রারম্ভিকতার উল্লেখ করতে চাই


add()পদ্ধতিগুলি সহ এক লাইনে নতুন অ্যারেলিস্ট তৈরি করার চেয়ে অ্যারে.এএসলিস্ট () কেন ভাল ?
ইগোরগানাপলস্কি

0

একটি সাধারণ ইউটিলিটি ফাংশন কেন এটি করে না?

static <A> ArrayList<A> ll(A... a) {
  ArrayList l = new ArrayList(a.length);
  for (A x : a) l.add(x);
  return l;
}

" ll" এর অর্থ "আক্ষরিক তালিকা"।

ArrayList<String> places = ll("Buenos Aires", "Córdoba", "La Plata");

0

আকর্ষণীয়ভাবে অন্যান্য ওভারলোডেড পদ্ধতির কোনও ওয়ান-লাইনার Stream::collect তালিকাভুক্ত নয়

ArrayList<String> places = Stream.of( "Buenos Aires", "Córdoba", "La Plata" ).collect( ArrayList::new, ArrayList::add, ArrayList::addAll );

-1

আসলে, এটি এক লাইনে করা সম্ভব:

Arrays.asList(new MyClass[] {new MyClass("arg1"), new MyClass("arg2")})

3
আমি কি এটি জিজ্ঞাসা করতে পারি এতে প্রশ্নটি কী যুক্ত করে? এই উত্তরটি ইতিমধ্যে অন্যান্য উত্তর দ্বারা একাধিকবার coveredাকা পড়েছে।
রহস্যময়

এটি প্রকৃতপক্ষে খুব খারাপ সমাধান যা এটি একটি বিমূর্ত তালিকা তৈরি করে। আপনি ধারকটিতে আরও কিছু যুক্ত করতে পারবেন না।
আতাইস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.