সহজ উত্তর
ইন জাভা 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
।
ArrasyList<String> places = ["Buenos Aires", "Córdoba", "La Plata"]