Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions html-generators/locales.properties
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ ar=🇸🇦 العربية
fr=🇫🇷 Français
ja=🇯🇵 日本語
ko=🇰🇷 한국어
bn=🇧🇩 বাংলা
it=🇮🇹 Italiano
pl=🇵🇱 Polski
tr=🇹🇷 Türkçe
18 changes: 18 additions & 0 deletions translations/content/bn/collections/collectors-teeing.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
title: Collectors.teeing()
oldApproach: দুটি ধাপে
modernApproach: teeing()
summary: একবার স্ট্রিম ট্রাভার্স করেই দুটি আলাদা এগ্রিগেশন (সমষ্টি) বের করুন।
explanation: Collectors.teeing() স্ট্রিমের প্রতিটি উপাদানকে দুটি আলাদা ডাউনস্ট্রিম কালেক্টরে পাঠায় এবং তাদের ফলাফলগুলোকে মার্জ বা একত্রিত করে। এর ফলে একই ডেটা দুইবার স্ট্রিম করতে হয় না এবং মিউটেবল (পরিবর্তনশীল) অ্যাকুমুলেটর ব্যবহারের প্রয়োজন পড়ে না।
whyModernWins:
- icon: "⚡"
title: সিঙ্গেল পাস
desc: দুইবারের বদলে স্ট্রিমটি মাত্র একবারই প্রসেস করা যায়।
- icon: "🧩"
title: কম্পোজেবল
desc: যেকোনো দুটি কালেক্টরকে একটি মার্জার ফাংশন দিয়ে সহজেই যুক্ত করা যায়।
- icon: "🔒"
title: ইমিউটেবল ফলাফল
desc: সরাসরি কোনো রেকর্ড (record) বা ভ্যালু অবজেক্টে মার্জ করা যায়।
support:
description: JDK 12 (মার্চ 2019) থেকে ব্যাপকভাবে উপলব্ধ
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
title: কালেকশনকে ইমিউটেবল (অপরিবর্তনীয়) ভাবে কপি করা
oldApproach: ম্যানুয়াল কপি + র‍্যাপ
modernApproach: List.copyOf()
summary: যেকোনো কালেকশনের একটি ইমিউটেবল কপি এক কল (call)-এই তৈরি করুন।
explanation: List.copyOf(), Set.copyOf(), এবং Map.copyOf() বিদ্যমান কালেকশনগুলোর ইমিউটেবল স্ন্যাপশট তৈরি করে। যদি সোর্স কালেকশনটি ইতিমধ্যেই ইমিউটেবল হয়, তবে কোনো নতুন কপি তৈরি করা হয় না।
whyModernWins:
- icon: "⚡"
title: স্মার্ট কপি
desc: সোর্স কালেকশনটি ইমিউটেবল হলে, নতুন করে কপি করার প্রয়োজন হয় না।
- icon: "📏"
title: এক কলে কাজ শেষ
desc: ম্যানুয়াল ArrayList তৈরি বা র‍্যাপ করার দরকার নেই।
- icon: "🛡️"
title: ডিফেন্সিভ কপি
desc: মূল কালেকশনে পরিবর্তন আনলেও কপি করা কালেকশনে তার কোনো প্রভাব পড়ে না।
support:
description: JDK 10 (মার্চ 2018) থেকে ব্যাপকভাবে উপলব্ধ
18 changes: 18 additions & 0 deletions translations/content/bn/collections/immutable-list-creation.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
title: ইমিউটেবল (Immutable) লিস্ট তৈরি
oldApproach: ভার্বোস র‍্যাপিং
modernApproach: List.of()
summary: একটি পরিষ্কার এক্সপ্রেশন ব্যবহার করে ইমিউটেবল লিস্ট তৈরি করুন।
explanation: List.of() একটি সত্যিকারের ইমিউটেবল লিস্ট তৈরি করে - এখানে কোনো র‍্যাপিং বা ডিফেন্সিভ কপির প্রয়োজন হয় না। এটি null-হোস্টাইল (অর্থাৎ null এলিমেন্ট গ্রহণ করে না) এবং কাঠামোগতভাবেও ইমিউটেবল। পুরোনো পদ্ধতিতে তিনটি নেস্টেড কল ব্যবহার করতে হতো।
whyModernWins:
- icon: "📏"
title: এক কলেই
desc: তিনটি নেস্টেড কলকে একটি মাত্র ফ্যাক্টরি মেথড দিয়ে প্রতিস্থাপন করা যায়।
- icon: "🔒"
title: সত্যিকারের ইমিউটেবল
desc: এটি কেবল একটি র‍্যাপার নয় – লিস্টটি নিজেই ইমিউটেবল।
- icon: "🛡️"
title: null-সেফ
desc: তৈরির সময়ই null এলিমেন্ট থাকলে তা প্রত্যাখ্যান করে, ফলে দ্রুত ত্রুটি ধরা পড়ে (failing fast)।
support:
description: JDK 9 (সেপ্টেম্বর 2017) থেকে ব্যাপকভাবে উপলব্ধ
18 changes: 18 additions & 0 deletions translations/content/bn/collections/immutable-map-creation.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
title: ইমিউটেবল (Immutable) ম্যাপ তৈরি
oldApproach: ম্যাপ বিল্ডার প্যাটার্ন
modernApproach: Map.of()
summary: কোনো বিল্ডার ছাড়াই ইনলাইন (inline) ম্যাপ তৈরি করুন যা ইমিউটেবল।
explanation: Map.of() সরাসরি কী-ভ্যালু পেয়ার (key-value pairs) গ্রহণ করে একটি ইমিউটেবল ম্যাপ তৈরি করে। যদি 10টির বেশি এন্ট্রি থাকে, তাহলে Map.entry() পেয়ার সহ Map.ofEntries() ব্যবহার করা উচিত।
whyModernWins:
- icon: "📏"
title: ইনলাইন তৈরি
desc: কোনো টেম্পোরারি মিউটেবল ম্যাপের প্রয়োজন নেই।
- icon: "🔒"
title: ইমিউটেবল ফলাফল
desc: ম্যাপ তৈরির পর আর পরিবর্তন করা যাবে না।
- icon: "🚫"
title: null কী/ভ্যালু নেই
desc: null এন্ট্রি সঙ্গে সঙ্গেই প্রত্যাখ্যান করা হয়।
support:
description: JDK 9 (সেপ্টেম্বর 2017) থেকে ব্যাপকভাবে উপলব্ধ
18 changes: 18 additions & 0 deletions translations/content/bn/collections/immutable-set-creation.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
title: ইমিউটেবল (Immutable) সেট তৈরি
oldApproach: ভার্বোস র‍্যাপিং
modernApproach: Set.of()
summary: একটি সিঙ্গেল ফ্যাক্টরি কল (factory call) ব্যবহার করে ইমিউটেবল সেট তৈরি করুন।
explanation: Set.of() একটি সত্যিকারের ইমিউটেবল সেট তৈরি করে, যা সেট তৈরির সময়ই null এবং ডুপ্লিকেট এলিমেন্ট (duplicate elements) গ্রহণ করে না। মিউটেবল সেটকে আর র‍্যাপ করার প্রয়োজন নেই।
whyModernWins:
- icon: "📏"
title: সুসংক্ষিপ্ত
desc: তিনটি নেস্টেড কলের পরিবর্তে একটি মাত্র লাইন ব্যবহার করুন।
- icon: "🚫"
title: ডুপ্লিকেট সনাক্ত করে
desc: ভুলবশত ডুপ্লিকেট এলিমেন্ট দিলে এরর (error) দেবে।
- icon: "🔒"
title: ইমিউটেবল
desc: সেট তৈরির পর আর যোগ বা অপসারণ (add/remove) করা সম্ভব নয়।
support:
description: JDK 9 (সেপ্টেম্বর 2017) থেকে ব্যাপকভাবে উপলব্ধ
18 changes: 18 additions & 0 deletions translations/content/bn/collections/map-entry-factory.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
title: Map.entry() ফ্যাক্টরি
oldApproach: SimpleEntry
modernApproach: Map.entry()
summary: একটি পরিষ্কার ফ্যাক্টরি মেথড ব্যবহার করে ম্যাপ এন্ট্রি (map entries) তৈরি করুন।
explanation: Map.entry() মেথডটি verbose AbstractMap.SimpleEntry কনস্ট্রাক্টরের (constructor) বিকল্প হিসাবে কাজ করে। এটি একটি ইমিউটেবল (immutable) এন্ট্রি রিটার্ন করে, যা Map.ofEntries() এবং স্ট্রিম অপারেশনগুলির জন্য খুবই উপযোগী।
whyModernWins:
- icon: "📏"
title: সুসংক্ষিপ্ত
desc: তিনটি লাইনের পরিবর্তে একটি মাত্র লাইন, যা এর উদ্দেশ্যকে আরও পরিষ্কার করে।
- icon: "🔒"
title: ইমিউটেবল
desc: তৈরি করা এন্ট্রিটি পরিবর্তন করা যাবে না।
- icon: "🧩"
title: কম্পোজেবল
desc: বড় ম্যাপ তৈরির জন্য Map.ofEntries() এর সাথে এটি দারুণভাবে কাজ করে।
support:
description: JDK 9 (সেপ্টেম্বর 2017) থেকে ব্যাপকভাবে উপলব্ধ
18 changes: 18 additions & 0 deletions translations/content/bn/collections/reverse-list-iteration.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
title: লিস্টের আইটারেশন উল্টো দিক থেকে (Reverse List Iteration)
oldApproach: ম্যানুয়াল ListIterator
modernApproach: reversed()
summary: একটি পরিষ্কার for-each লুপ ব্যবহার করে লিস্টের উপাদানগুলোকে উল্টো দিক থেকে আইটারেট করুন।
explanation: SequencedCollection-এর reversed() মেথডটি লিস্টের একটি রিভার্স-অর্ডারড ভিউ (reverse-ordered view) প্রদান করে। এই ভিউটি মূল লিস্টের ওপর ভিত্তি করে তৈরি হয়, তাই কোনো কপি করা হয় না। উন্নত for লুপ সিনট্যাক্স (enhanced for loop syntax) ব্যবহার করে রিভার্স আইটারেশনকে ফরোয়ার্ড আইটারেশনের মতোই পঠনযোগ্য করে তোলে।
whyModernWins:
- icon: "📖"
title: স্বাভাবিক সিনট্যাক্স
desc: verbose ListIterator-এর পরিবর্তে সহজবোধ্য for-each লুপ ব্যবহার করা হয়।
- icon: "⚡"
title: কোনো কপি হয় না
desc: reversed() একটি ভিউ রিটার্ন করে, তাই পারফরম্যান্সের ওপর কোনো অতিরিক্ত চাপ (overhead) পড়ে না।
- icon: "🧩"
title: সামঞ্জস্যপূর্ণ API
desc: List, Deque, এবং SortedSet-এর মতো কালেকশনগুলোতে একইভাবে কাজ করে।
support:
description: JDK 21 LTS (সেপ্টেম্বর 2023) থেকে ব্যাপকভাবে উপলব্ধ
18 changes: 18 additions & 0 deletions translations/content/bn/collections/sequenced-collections.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
title: সিকোয়েন্সড কালেকশন (Sequenced Collections)
oldApproach: ইনডেক্স অ্যারিথমেটিক (Index Arithmetic)
modernApproach: getFirst()/getLast()
summary: পরিষ্কার API মেথড ব্যবহার করে লিস্টের প্রথম/শেষ এলিমেন্ট অ্যাক্সেস করা এবং রিভার্সড ভিউ (reversed view) তৈরি করা।
explanation: SequencedCollection, List, Deque, SortedSet, এবং LinkedHashSet-এ getFirst(), getLast(), reversed(), addFirst(), addLast() মেথডগুলো যোগ করে। এর ফলে আর size-1 অ্যারিথমেটিক বা ম্যানুয়াল রিভার্স আইটারেশনের প্রয়োজন হয় না।
whyModernWins:
- icon: "📖"
title: স্ব-ডকুমেন্টিং
desc: getLast() মেথডটি get(size()-1) এর চেয়ে অনেক বেশি স্পষ্ট এবং পঠনযোগ্য।
- icon: "🔄"
title: রিভার্সড ভিউ
desc: reversed() মেথড একটি ভিউ (view) রিটার্ন করে, তাই কোনো কপি করার প্রয়োজন হয় না।
- icon: "🧩"
title: ইউনিফর্ম API
desc: List, Deque, এবং SortedSet-এর মতো কালেকশনগুলোতে একইভাবে কাজ করে।
support:
description: JDK 21 LTS (সেপ্টেম্বর 2023) থেকে ব্যাপকভাবে উপলব্ধ
18 changes: 18 additions & 0 deletions translations/content/bn/collections/stream-toarray-typed.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
title: টাইপড স্ট্রিমকে অ্যারেতে রূপান্তর (Typed Stream toArray)
oldApproach: ম্যানুয়াল অ্যারে কপি
modernApproach: toArray(generator)
summary: একটি মেথড রেফারেন্স (method reference) ব্যবহার করে স্ট্রিমকে টাইপড অ্যারেতে রূপান্তর করুন।
explanation: toArray(IntFunction) মেথডটি একটি স্ট্রিম থেকে সঠিক টাইপের অ্যারে তৈরি করে। এখানে জেনারেটর (যেমন String[]::new) স্ট্রিমকে বলে দেয় কোন ধরনের অ্যারে তৈরি করতে হবে।
whyModernWins:
- icon: "🎯"
title: টাইপ-সেফ (Type-safe)
desc: কোনো Object[] কাস্ট করার প্রয়োজন হয় না – অ্যারের টাইপ সঠিক থাকে।
- icon: "🔗"
title: চেইনেবল (Chainable)
desc: যেকোনো স্ট্রিম পাইপলাইনের শেষে এটি ব্যবহার করা যায়।
- icon: "📏"
title: সুসংক্ষিপ্ত
desc: একটি এক্সপ্রেশন ব্যবহার করেই ম্যানুয়াল লুপের কাজ সম্পন্ন হয়।
support:
description: JDK 8 (মার্চ 2014) থেকে ব্যাপকভাবে উপলব্ধ
18 changes: 18 additions & 0 deletions translations/content/bn/collections/unmodifiable-collectors.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
title: আনমডিফাইয়েবল কালেক্টর (Unmodifiable Collectors)
oldApproach: collectingAndThen
modernApproach: stream.toList()
summary: stream.toList() ব্যবহার করে সরাসরি একটি আনমডিফাইয়েবল লিস্টে (unmodifiable list) ডেটা সংগ্রহ করুন।
explanation: জাভা 10-এ toUnmodifiableList(), toUnmodifiableSet(), এবং toUnmodifiableMap() মেথডগুলো যোগ করা হয়েছিল, যা verbose collectingAndThen র‍্যাপারকে প্রতিস্থাপন করে। বিশেষ করে লিস্টের জন্য, জাভা 16-এর stream.toList() আরও সরল একটি বিকল্প প্রদান করে – এখানে collect() মেথড কল করারও প্রয়োজন নেই। অন্যান্য কালেকশন টাইপের জন্য toUnmodifiableSet() এবং toUnmodifiableMap() ব্যবহার করা উচিত।
whyModernWins:
- icon: "📏"
title: সবচেয়ে সংক্ষিপ্ত
desc: stream.toList()-এর জন্য collect() বা Collectors ইম্পোর্ট করার কোনো প্রয়োজনই নেই।
- icon: "🔒"
title: ইমিউটেবল (Immutable)
desc: ফলাফলে কোনো পরিবর্তন আনা সম্ভব নয় – আকস্মিক মিউটেশনের (accidental mutations) ঝুঁকি নেই।
- icon: "📖"
title: পঠনযোগ্য
desc: যেকোনো স্ট্রিম পাইপলাইনের টার্মিনাল ধাপ (terminal step) হিসেবে এটি স্বাভাবিকভাবেই পঠনযোগ্য।
support:
description: JDK 16 (মার্চ 2021) থেকে ব্যাপকভাবে উপলব্ধ
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
title: CompletableFuture চেইনিং (Chaining)
oldApproach: ব্লকিং Future.get()
modernApproach: CompletableFuture
summary: CompletableFuture ব্যবহার করে কোনো ব্লক না করে অ্যাসিঙ্ক্রোনাস অপারেশনগুলিকে চেইন করুন।
explanation: CompletableFuture নন-ব্লকিং অ্যাসিঙ্ক (async) পাইপলাইন তৈরি করতে সাহায্য করে। আপনি thenApply, thenCompose, thenAccept মেথডগুলো ব্যবহার করে অপারেশনগুলোকে চেইন করতে পারবেন। exceptionally() মেথড দিয়ে এরর (error) হ্যান্ডেল করা যায় এবং allOf/anyOf মেথড দিয়ে একাধিক ফিউচারকে একত্রিত করা যায়।
whyModernWins:
- icon: "🔗"
title: চেইনেবল (Chainable)
desc: অ্যাসিঙ্ক স্টেপগুলিকে একটি পঠনযোগ্য পাইপলাইনে সাজানো যায়।
- icon: "🚫"
title: নন-ব্লকিং (Non-blocking)
desc: কোনো থ্রেড ফলাফলের জন্য অলসভাবে অপেক্ষা করে না।
- icon: "🛡️"
title: এরর হ্যান্ডলিং (Error Handling)
desc: exceptionally() এবং handle() মেথডগুলো পরিষ্কারভাবে এরর রিকভারি (error recovery) করার সুবিধা দেয়।
support:
description: JDK 8 (মার্চ 2014) থেকে ব্যাপকভাবে উপলব্ধ
Loading