CodeGym/Java Blog/এলোমেলো/লুপ লেখা বন্ধ করুন! জাভা 8-এ সংগ্রহের সাথে কাজ করার জন্য ...
John Squirrels
লেভেল 41
San Francisco

লুপ লেখা বন্ধ করুন! জাভা 8-এ সংগ্রহের সাথে কাজ করার জন্য সেরা 10টি সেরা অনুশীলন

এলোমেলো দলে প্রকাশিত
সদস্যগণ
লুপ লেখা বন্ধ করুন!  জাভা 8 - 1-এ সংগ্রহের সাথে কাজ করার জন্য শীর্ষ 10টি সেরা অনুশীলন আপনি জানেন, আমাদের অভ্যাস দ্বিতীয় প্রকৃতি। এবং একবার আপনি লিখতে অভ্যস্ত হয়ে গেলে for (int i = 0; i <......), আপনার কোনও অংশই এই গঠনটি পুনরায় শিখতে চায় না (বিশেষত যেহেতু এটি বেশ সহজ এবং বোধগম্য)। যাইহোক, একই মৌলিক ক্রিয়াকলাপগুলি সম্পাদন করতে প্রায়শই লুপগুলি বারবার ব্যবহার করা হয় এবং পুনরাবৃত্তি এমন একটি জিনিস যা আমরা খুব পরিত্রাণ পেতে চাই। জাভা 8 এর সাথে, ওরাকল আমাদের এটি করতে সাহায্য করার সিদ্ধান্ত নিয়েছে। নীচে 10টি সেরা সংগ্রহের পদ্ধতি রয়েছে যা আপনাকে এক টন সময় এবং কোড সংরক্ষণ করবে।

1. Iterable.forEach(ভোক্তা <? সুপার T> অ্যাকশন)

নাম নিজেই কথা বলে। এটি একটি যুক্তি হিসাবে পাস করা সংগ্রহের উপর পুনরাবৃত্তি করে এবং এর প্রতিটি উপাদানের জন্য অ্যাকশন ল্যাম্বডা এক্সপ্রেশন চালায়।
List <Integer> numbers = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7));
 numbers.forEach(s -> System.out.print(s + " "));
1 2 3 4 5 6 7

2. Collection.removeIf(Predicate<? super E> ফিল্টার)

আবার, এখানে কঠিন কিছুই নেই। পদ্ধতিটি সংগ্রহের উপর পুনরাবৃত্তি করে এবং মেলে এমন কোনো উপাদান সরিয়ে দেয় filter
List <Integer> numbers = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7));
numbers.removeIf(s -> s > 5);
numbers.forEach(s -> System.out.print(s + " "));
একটি একক লাইনে, আমরা তালিকা থেকে 5-এর বেশি সব সংখ্যাকে সরিয়ে দিচ্ছি।

3. Map.forEach(BiConsumer <? super K, ? super V> action)

পদ্ধতিটি forEachশুধুমাত্র সেই ক্লাসের জন্যই কাজ করে না যা Collectionইন্টারফেস বাস্তবায়ন করে, এর জন্যও Map
Map <String, String> books = new HashMap<>();
books.put("War and Peace", "Leo Tolstoy");
books.put("Crime and Punishment", "Fyodor Dostoevsky");
books.put("Thinking in Java", "Bruce Eckel");
books.put("The Brothers Karamazov", "Fyodor Dostoevsky");
books.put("The Lord of the Rings", "John Tolkien");
books.forEach((a,b) -> System.out.println("Book title: " + a + ". Author: "+ b));
Book title: The Brothers Karamazov. Author: Fyodor Dostoevsky
Book title: Thinking in Java. Author: Bruce Eckel
Book title: Crime and Punishment. Author: Fyodor Dostoevsky
Book title: War and Peace. Author: Leo Tolstoy
Book title: Lord of the Rings. Author: John Tolkien

4. Map.compute (K কী, BiFunction<? Super K,? Super V,? প্রসারিত করে V> remappingFunction)

একটু বেশি ভীতিকর দেখায়, কিন্তু বাস্তবে সহজ, আগের সবগুলোর মতো। এই পদ্ধতিটি keyনির্বাহের ফলাফলের সমান মান নির্ধারণ করে mappingFunction। উদাহরণ স্বরূপ:
Map <String, String> books = new HashMap<>();
books.put("War and Peace", "Leo Tolstoy");
books.put("Crime and Punishment", "Fyodor Dostoevsky");
books.put("Thinking in Java", "Bruce Eckel");
books.put("The Brothers Karamazov", "Fyodor Dostoevsky");
books.put("The Lord of the Rings", "John Tolkien");
books.forEach((a,b) -> System.out.println("Book title: " + a + ". Author: "+ b));

books.compute("Thinking in Java", (a,b) -> b + ", cool dude");
System.out.println("_______________________");
books.forEach((a,b) -> System.out.println("Book title: " + a + ". Author: "+ b));
Book title: The Brothers Karamazov. Author: Fyodor Dostoevsky
Book title: Thinking in Java. Author: Bruce Eckel
Book title: Crime and Punishment. Author: Fyodor Dostoevsky
Book title: War and Peace. Author: Leo Tolstoy
Book title: Lord of the Rings. Author: John Tolkien
_______________________
Book title: The Brothers Karamazov. Author: Fyodor Dostoevsky
Book title: Thinking in Java. Author: Bruce Eckel, cool dude
Book title: Crime and Punishment. Author: Fyodor Dostoevsky
Book title: War and Peace. Author: Leo Tolstoy
Book title: Lord of the Rings. Author: John Tolkien
"জাভাতে চিন্তা" এর লেখক অবশ্যই দুর্দান্ত! :)

5. Map.computeIfAbsent(K কী, ফাংশন <? super K, ? প্রসারিত V> ম্যাপিং ফাংশন)

এই পদ্ধতিটি তে একটি নতুন উপাদান যোগ করবে Map, তবে শুধুমাত্র যদি এটিতে সেই কী সহ একটি উপাদান না থাকে। নির্ধারিত মানটি কার্যকর করার ফলাফল হবে mappingFunction। কী সহ একটি উপাদান ইতিমধ্যেই বিদ্যমান থাকলে, এটি ওভাররাইট করা হবে না। এটা যেমন আছে তেমনি থাকবে। আসুন আমাদের বইগুলিতে ফিরে আসুন এবং একটি নতুন পদ্ধতি চেষ্টা করি:
Map <String, String> books = new HashMap<>();
books.put("War and Peace", "Leo Tolstoy");
books.put("Crime and Punishment", "Fyodor Dostoevsky");
books.put("Thinking in Java", "Bruce Eckel");
books.put("The Brothers Karamazov", "Fyodor Dostoevsky");
books.put("The Lord of the Rings", "John Tolkien");

books.computeIfAbsent("Harry Potter and the Prisoner of Azkaban", b -> getHarryPotterAuthor());
books.forEach((a,b) -> System.out.println("Book title: " + a + ". Author: "+ b));
এখানে আমাদের mappingFunction:
public static String getHarryPotterAuthor() {
        return "Joanne Rowling";
    }
এবং এখানে নতুন বই:
Book title: The Brothers Karamazov. Author: Fyodor Dostoevsky
Book title: Thinking in Java. Author: Bruce Eckel
Book title: Crime and Punishment. Author: Fyodor Dostoevsky
Book title: War and Peace. Author: Leo Tolstoy
Book title: Harry Potter and the Prisoner of Azkaban. Author: Joanne Rowling
Book title: Lord of the Rings. Author: John Tolkien

6. Map.computeIfPresent(K কী, BiFunction<? super K, ? super V, ? প্রসারিত করে V> রিম্যাপিং ফাংশন)

এখানে আমাদের একই নীতি রয়েছে Map.compute(), কিন্তু গণনাগুলি শুধুমাত্র তখনই সঞ্চালিত হয় যদি একটি আইটেম keyইতিমধ্যেই বিদ্যমান থাকে।
Map <String, String> books = new HashMap<>();
books.put("War and Peace", "Leo Tolstoy");
books.put("Crime and Punishment", "Fyodor Dostoevsky");
books.put("Thinking in Java", "Bruce Eckel");
books.put("The Brothers Karamazov", "Fyodor Dostoevsky");
books.put("The Lord of the Rings", "John Tolkien");

books.computeIfPresent("Eugene Onegin", (a,b) -> b = "Alexander Pushkin");
System.out.println("_________________");
books.forEach((a,b) -> System.out.println("Book title: " + a + ". Author: "+ b));
books.computeIfPresent("The Brothers Karamazov", (a,b) -> b = "Alexander Pushkin");
System.out.println("_________________");
books.forEach((a,b) -> System.out.println("Book title: " + a + ". Author: "+ b));
ফাংশনে প্রথম কলে কোনো পরিবর্তন হয়নি, কারণ আমাদের তে "ইউজিন ওয়ানগিন" শিরোনামের কোনো বই নেই Map। কিন্তু দ্বিতীয় কলে, প্রোগ্রামটি "দ্য ব্রাদার্স কারামাজভ" বইয়ের লেখককে আলেকজান্ডার পুশকিনে পরিবর্তন করে। আউটপুট:
_________________
Book title: The Brothers Karamazov. Author: Fyodor Dostoevsky
Book title: Thinking in Java. Author: Bruce Eckel
Book title: Crime and Punishment. Author: Fyodor Dostoevsky
Book title: War and Peace. Author: Leo Tolstoy
Book title: Lord of the Rings. Author: John Tolkien
 _________________
Book title: The Brothers Karamazov. Author: Alexander Pushkin
Book title: Thinking in Java. Author: Bruce Eckel
Book title: Crime and Punishment. Author: Fyodor Dostoevsky
Book title: War and Peace. Author: Leo Tolstoy
Book title: Lord of the Rings. Author: John Tolkien

7. Map.getOrDefault(অবজেক্ট কী, V ডিফল্ট ভ্যালু)

এই পদ্ধতিটি এর সাথে সম্পর্কিত মান প্রদান করে key। যদি কীটি বিদ্যমান না থাকে, তাহলে এটি ডিফল্ট মান প্রদান করে।
Map <String, String> books = new HashMap<>();
books.put("War and Peace", "Leo Tolstoy");
books.put("Crime and Punishment", "Fyodor Dostoevsky");
books.put("Thinking in Java", "Bruce Eckel");
books.put("The Brothers Karamazov", "Fyodor Dostoevsky");
books.put("The Lord of the Rings", "John Tolkien");

String igor = books.getOrDefault("The Tale of Igor's Campaign", "Unknown author");
System.out.println(igor);
এটি খুব সুবিধাজনক:
Unknown author

8. Map.merge(K কী, V মান, BiFunction<? super V, ? super V, ? প্রসারিত করে V> রিম্যাপিং ফাংশন)

এই পদ্ধতিটি আপনাকে কত লাইন কোড সংরক্ষণ করবে তা গণনা করার চেষ্টা করার জন্য আমি বিরক্তও করিনি।
  1. যদি keyআপনার মধ্যে বিদ্যমান না থাকে Map, অথবা যদি valueএই কীটির জন্য হয় null, তাহলে পদ্ধতিটি পাস করা key-valueজোড়াকে যোগ করে Map
  2. যদি keyবিদ্যমান থাকে এবং তার value != null, তাহলে পদ্ধতিটি কার্যকর করার ফলাফলে তার মান পরিবর্তন করে remappingFunction
  3. যদি remappingFunctionফিরে আসে null, তাহলে keyসংগ্রহ থেকে সরানো হয়।
Map <String, String> books = new HashMap<>();
books.put("War and Peace", "Leo Tolstoy");
books.put("Crime and Punishment", "Fyodor Dostoevsky");
books.put("Thinking in Java", "Bruce Eckel");
books.put("The Brothers Karamazov", "Fyodor Dostoevsky");
books.put("The Lord of the Rings", "John Tolkien");

books.merge("Thinking in Java", "Bruce Eckel", (a, b) -> b + " and some coauthor");
books.forEach((a, b) -> System.out.println("Title: " + a + ". Author: "+ b));
আউটপুট:
Title: The Brothers Karamazov. Author: Fyodor Dostoevsky
Title: Thinking in Java. Author: Bruce Eckel and some coauthor
Title: Crime and Punishment. Author: Fyodor Dostoevsky
Title: War and Peace. Author: Leo Tolstoy
Title: Lord of the Rings. Author: John Tolkien
*দুঃখিত, ব্রুস*

9. Map.putIfAbsent(K কী, V মান)

পূর্বে, একটি তে একটি জোড়া যোগ করতে Map, যদি এটি ইতিমধ্যে সেখানে না থাকে তবে আপনাকে নিম্নলিখিতগুলি করতে হবে:
Map <String, String> map = new HashMap<>();
if (map.get("Lord of the Rings") == null)
    map.put("Lord of the Rings", "John Tolkien");
এখন সবকিছু অনেক সহজ হয়ে গেছে:
Map<String, String> map = new HashMap<>();
map.putIfAbsent("Lord of the Rings", "John Tolkien");

10. Map.replace এবং Map.replaceAll()

শেষ কিন্তু অন্তত না.
  1. Map.replace(K key, V newValue)keyএর মান প্রতিস্থাপন করে newValue, যদি এই ধরনের কী বিদ্যমান থাকে। না হলে কিছুই হয় না।
  2. Map.replace(K key, V oldValue, V newValue)একই জিনিস করে, কিন্তু শুধুমাত্র যদি বর্তমান মান keyসমান হয় oldValue
  3. Map.replaceAll(BiFunction<? super K, ? super V, ? extends V> function)প্রতিটিকে valueফাংশনের ফলাফল দিয়ে প্রতিস্থাপন করে।
উদাহরণ স্বরূপ:
Map <String, String> books = new HashMap<>();
books.put("War and Peace", "Leo Tolstoy");
books.put("Crime and Punishment", "Fyodor Dostoevsky");
books.put("Thinking in Java", "Bruce Eckel");
books.put("The Brothers Karamazov", "Fyodor Dostoevsky");
books.put("The Lord of the Rings", "John Tolkien");

books.replace("The Brothers Karamazov", "Bruce Eckel", "John Tolkien");
books.forEach((a, b) -> System.out.println("Title: " + a + ". Author: "+ b));
Title: The Brothers Karamazov. Author: Fyodor Dostoevsky
Title: Thinking in Java. Author: Bruce Eckel
Title: Crime and Punishment. Author: Fyodor Dostoevsky
Title: War and Peace. Author: Leo Tolstoy
Title: Lord of the Rings. Author: John Tolkien
এটা কাজ করেনি! "দ্য ব্রাদার্স কারামাজভ" কীটির বর্তমান মান হল "ফিওদর দস্তয়েভস্কি", "ব্রুস একেল" নয়, তাই কিছুই পরিবর্তন হয়নি।
Map  books = new HashMap<>();
books.put("War and Peace", "Leo Tolstoy");
books.put("Crime and Punishment", "Fyodor Dostoevsky");
books.put("Thinking in Java", "Bruce Eckel");
books.put("The Brothers Karamazov", "Fyodor Dostoevsky");
books.put("The Lord of the Rings", "John Tolkien");

books.replaceAll((a,b) -> getCoolAuthor());
books.forEach((a, b) -> System.out.println("Title: " + a + ". Author: "+ b));

public static String getCoolAuthor() {
        return "Cool author";
     }
Title: The Brothers Karamazov. Author: Cool author
Title: Thinking in Java. Author: Cool author
Title: Crime and Punishment. Author: Cool author
Title: War and Peace. Author: Cool author
Title: Lord of the Rings. Author: Cool author
Mapআমরা সহজে কোনো জটিল নির্মাণ ছাড়াই সমগ্র মান পরিবর্তন করেছি ! PS নতুনের সাথে অভ্যস্ত হওয়া সবসময়ই কঠিন, তবে এই পরিবর্তনগুলি সত্যিই ভাল। যেকোনো ঘটনা, আমার কোডের কিছু অংশ অবশ্যই আগের তুলনায় স্প্যাগেটির মতো কম :) শেখার সৌভাগ্য!
মন্তব্য
  • জনপ্রিয়
  • নতুন
  • পুরানো
মন্তব্য লেখার জন্য তোমাকে অবশ্যই সাইন ইন করতে হবে
এই পাতায় এখনও কোনো মন্তব্য নেই