আমি জাভা 8 Stream
গুলি একটিতে উপাদানগুলি খুঁজতে ব্যবহার করার চেষ্টা করছি LinkedList
। আমি গ্যারান্টি দিতে চাই, তবে ফিল্টারের মানদণ্ডের সাথে একটি এবং একমাত্র ম্যাচ রয়েছে।
এই কোডটি নিন:
public static void main(String[] args) {
LinkedList<User> users = new LinkedList<>();
users.add(new User(1, "User1"));
users.add(new User(2, "User2"));
users.add(new User(3, "User3"));
User match = users.stream().filter((user) -> user.getId() == 1).findAny().get();
System.out.println(match.toString());
}
static class User {
@Override
public String toString() {
return id + " - " + username;
}
int id;
String username;
public User() {
}
public User(int id, String username) {
this.id = id;
this.username = username;
}
public void setUsername(String username) {
this.username = username;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public int getId() {
return id;
}
}
এই কোডটি User
তাদের আইডির ভিত্তিতে একটি সন্ধান করে। তবে কতগুলি User
ফিল্টারটির সাথে মেলে তার কোনও গ্যারান্টি নেই ।
ফিল্টার লাইন এতে পরিবর্তন করা হচ্ছে:
User match = users.stream().filter((user) -> user.getId() < 0).findAny().get();
একটি NoSuchElementException
(ভাল!) নিক্ষেপ করবে
যদিও এখানে একাধিক ম্যাচ থাকলে ত্রুটি ছুড়ে দিতে চাই। এই কাজ করতে একটি উপায় আছে কি?
Stream::size
?
Stream
আগের চেয়ে অনেক বেশি বুঝতে সাহায্য করেছে ...
LinkedHashSet
(সন্নিবেশকরণের আদেশটি সংরক্ষণ করা চাইছেন) ধরে নেওয়া বা একটি HashSet
পাশাপাশি ব্যবহার করার দরকার পড়েছিল । যদি আপনার সংগ্রহটি কেবলমাত্র একটি একক ব্যবহারকারী আইডি সন্ধান করতে ব্যবহৃত হয়, তবে আপনি কেন অন্য সমস্ত আইটেম সংগ্রহ করছেন? যদি এমন কোনও সম্ভাবনা থাকে যা আপনার সর্বদা কিছু ইউজার আইডি খুঁজে বের করতে হবে যা অনন্য হওয়াও প্রয়োজন, তবে কেন একটি তালিকা ব্যবহার করে একটি সেট নয়? আপনি পিছনে প্রোগ্রামিং হয়। কাজের জন্য সঠিক সংগ্রহটি ব্যবহার করুন এবং নিজেকে এই মাথাব্যাথা বাঁচান
count()
এটি একটি টার্মিনাল অপারেশন যাতে আপনি এটি করতে পারবেন না। পরে স্ট্রিম ব্যবহার করা যাবে না।