Tuple হলো একাধিক ভিন্ন ভিন্ন ডেটা টাইপ একত্রে একটি অবজেক্ট হিসেবে সংরক্ষণের একটি কৌশল। জাভাতে Tuple সরাসরি বিল্ট-ইন সাপোর্ট নেই, তবে বিভিন্ন Tuple Libraries ব্যবহার করে এই কাঠামো ব্যবহার করা যায়।
Apache Commons Lang একটি জনপ্রিয় লাইব্রেরি, যা Pair
এবং Triple
এর মতো Tuple সাপোর্ট করে।
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
import org.apache.commons.lang3.tuple.Pair;
import org.apache.commons.lang3.tuple.Triple;
public class ApacheCommonsTupleExample {
public static void main(String[] args) {
// Pair Example
Pair<String, Integer> pair = Pair.of("Alice", 30);
System.out.println("Name: " + pair.getLeft());
System.out.println("Age: " + pair.getRight());
// Triple Example
Triple<String, Integer, String> triple = Triple.of("Bob", 25, "Developer");
System.out.println("Name: " + triple.getLeft());
System.out.println("Age: " + triple.getMiddle());
System.out.println("Profession: " + triple.getRight());
}
}
Vavr একটি জাভা ফাংশনাল প্রোগ্রামিং লাইব্রেরি, যা 1 থেকে 8 পর্যন্ত Tuple সাপোর্ট করে।
<dependency>
<groupId>io.vavr</groupId>
<artifactId>vavr</artifactId>
<version>0.10.4</version>
</dependency>
import io.vavr.Tuple;
import io.vavr.Tuple2;
import io.vavr.Tuple3;
public class VavrTupleExample {
public static void main(String[] args) {
// Tuple2 Example
Tuple2<String, Integer> tuple2 = Tuple.of("Alice", 30);
System.out.println("Name: " + tuple2._1);
System.out.println("Age: " + tuple2._2);
// Tuple3 Example
Tuple3<String, Integer, String> tuple3 = Tuple.of("Bob", 25, "Developer");
System.out.println("Name: " + tuple3._1);
System.out.println("Age: " + tuple3._2);
System.out.println("Profession: " + tuple3._3);
}
}
Javatuples একটি হালকা লাইব্রেরি, যা 1 থেকে 10 পর্যন্ত Tuple সাপোর্ট করে।
<dependency>
<groupId>org.javatuples</groupId>
<artifactId>javatuples</artifactId>
<version>1.2</version>
</dependency>
import org.javatuples.Pair;
import org.javatuples.Triplet;
public class JavatuplesExample {
public static void main(String[] args) {
// Pair Example
Pair<String, Integer> pair = Pair.with("Alice", 30);
System.out.println("Name: " + pair.getValue0());
System.out.println("Age: " + pair.getValue1());
// Triplet Example
Triplet<String, Integer, String> triplet = Triplet.with("Bob", 25, "Developer");
System.out.println("Name: " + triplet.getValue0());
System.out.println("Age: " + triplet.getValue1());
System.out.println("Profession: " + triplet.getValue2());
}
}
Google Guava একটি বহুল ব্যবহৃত লাইব্রেরি, যা Table
এবং ImmutableMap
ব্যবহার করে Tuple-এর বিকল্প তৈরি করতে পারে।
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>31.1-jre</version>
</dependency>
import com.google.common.collect.ImmutableMap;
public class GuavaTupleExample {
public static void main(String[] args) {
ImmutableMap<String, Integer> person = ImmutableMap.of("Alice", 30);
person.forEach((key, value) -> {
System.out.println("Name: " + key);
System.out.println("Age: " + value);
});
}
}
লাইব্রেরি | সাপোর্ট করা টুপল | Immutable? | ডিপেনডেন্সি | প্রধান বৈশিষ্ট্য |
---|---|---|---|---|
Apache Commons | Pair, Triple | No | Lightweight | সহজ এবং দ্রুত |
Vavr | 1-8 Tuples | Yes | Medium | ফাংশনাল প্রোগ্রামিং সমর্থন |
Javatuples | 1-10 Tuples | Yes | Lightweight | সাধারণ এবং ব্যবহার সহজ |
Guava | Custom | Yes | Medium | Immutable Collections |
POJO
বা Record
ক্লাস তৈরি করুন।Java-তে Tuple-এর জন্য বিল্ট-ইন সাপোর্ট না থাকলেও বিভিন্ন লাইব্রেরি (যেমন Apache Commons, Vavr, Javatuples) ব্যবহার করে কার্যকরভাবে Tuple পরিচালনা করা যায়। Apache Commons হালকা এবং সাধারণ কাজের জন্য উপযুক্ত, যখন Vavr ফাংশনাল প্রোগ্রামিং সমর্থন করে। টুপল ব্যবহারের সময় কোডের সরলতা এবং কার্যকারিতা বজায় রাখুন।
Java Tuples হলো এমন একটি ডেটা স্ট্রাকচার যা বিভিন্ন ডেটা টাইপের একাধিক মান একত্রে সংরক্ষণ করতে পারে। তবে, Java-তে Tuples এর জন্য কোনো Built-in Support নেই। এই সীমাবদ্ধতাকে কাটিয়ে উঠতে ডেভেলপাররা তৃতীয় পক্ষের লাইব্রেরি বা কাস্টম সমাধান ব্যবহার করে।
POJO
(Plain Old Java Object) বা Record
ব্যবহার উৎসাহিত করা হয়।_1
, _2
ইত্যাদি), যা কোডের রিডেবিলিটি কমায়।POJO
বা Record
ব্যবহার করলে ডেটার টাইপ এবং উদ্দেশ্য স্পষ্ট হয়।Tuples-এর পরিবর্তে একটি কাস্টম ক্লাস তৈরি করে স্পষ্ট এবং রিডেবল সমাধান তৈরি করা যায়।
Example:
class Person {
private final String name;
private final int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
public class PojoExample {
public static void main(String[] args) {
Person person = new Person("Alice", 30);
System.out.println("Name: " + person.getName());
System.out.println("Age: " + person.getAge());
}
}
Java 14 থেকে Record ব্যবহার করা যায়, যা Tuples-এর জন্য কার্যকর সমাধান।
Example:
public record Person(String name, int age) {}
public class RecordExample {
public static void main(String[] args) {
Person person = new Person("Alice", 30);
System.out.println("Name: " + person.name());
System.out.println("Age: " + person.age());
}
}
তৃতীয় পক্ষের লাইব্রেরি (যেমন Vavr, Apache Commons Lang, Javatuples) ব্যবহার করে Tuples তৈরি করা যায়।
Dependency:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
Example:
import org.apache.commons.lang3.tuple.Pair;
public class ApacheCommonsExample {
public static void main(String[] args) {
Pair<String, Integer> pair = Pair.of("Alice", 30);
System.out.println("Name: " + pair.getLeft());
System.out.println("Age: " + pair.getRight());
}
}
Dependency:
<dependency>
<groupId>io.vavr</groupId>
<artifactId>vavr</artifactId>
<version>0.10.4</version>
</dependency>
Example:
import io.vavr.Tuple;
import io.vavr.Tuple2;
public class VavrExample {
public static void main(String[] args) {
Tuple2<String, Integer> tuple = Tuple.of("Alice", 30);
System.out.println("Name: " + tuple._1);
System.out.println("Age: " + tuple._2);
}
}
Dependency:
<dependency>
<groupId>org.javatuples</groupId>
<artifactId>javatuples</artifactId>
<version>1.2</version>
</dependency>
Example:
import org.javatuples.Pair;
public class JavatuplesExample {
public static void main(String[] args) {
Pair<String, Integer> pair = Pair.with("Alice", 30);
System.out.println("Name: " + pair.getValue0());
System.out.println("Age: " + pair.getValue1());
}
}
বৈশিষ্ট্য | Tuples | POJO/Record |
---|---|---|
রিডেবিলিটি | _1 , _2 ইত্যাদি নামবিহীন ফিল্ড। | ফিল্ড নামের কারণে বেশি রিডেবল। |
কোডের সরলতা | কম কোডে ব্যবহার করা যায়। | কিছুটা বেশি কোড প্রয়োজন। |
টাইপ সেফটি | সাধারণত ভালো টাইপ সেফটি। | পুরোপুরি টাইপ সেফ। |
ইন্টেনশন স্পষ্টতা | উদ্দেশ্য অস্পষ্ট হতে পারে। | উদ্দেশ্য স্পষ্ট। |
মডেলিং | ছোট কাজের জন্য উপযুক্ত। | বড় এবং জটিল ডেটা মডেলিংয়ে কার্যকর। |
যদিও Java-তে Tuples-এর জন্য Built-in Support নেই, তবুও বিভিন্ন তৃতীয় পক্ষের লাইব্রেরি বা কাস্টম সমাধান ব্যবহার করে Tuples ব্যবহার করা যায়।
POJO
বা Record
ব্যবহার করা ভালো।আপনার প্রয়োজন অনুযায়ী টুল বা কৌশল নির্বাচন করুন।
Apache Commons Lang লাইব্রেরি টাপল ব্যবহারের জন্য সরাসরি সমর্থন প্রদান করে। এটি Pair
এবং Triple
এর মতো ডেটা স্ট্রাকচার সরবরাহ করে, যা একাধিক মানকে একত্রে গ্রুপ করতে সাহায্য করে।
Maven প্রকল্পে Apache Commons Lang যুক্ত করতে হলে নিচের ডিপেনডেন্সি ব্যবহার করুন:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
Pair
দুইটি মান সংরক্ষণ করে এবং সহজে তাদের অ্যাক্সেস করতে দেয়।
কোড উদাহরণ:
import org.apache.commons.lang3.tuple.Pair;
public class PairExample {
public static void main(String[] args) {
// একটি Pair তৈরি
Pair<String, Integer> student = Pair.of("John", 85);
// ডেটা অ্যাক্সেস
String name = student.getLeft(); // বা student.getKey()
int score = student.getRight(); // বা student.getValue()
System.out.println("Name: " + name);
System.out.println("Score: " + score);
}
}
আউটপুট:
Name: John
Score: 85
Triple
তিনটি মান সংরক্ষণ করে এবং সহজে তাদের অ্যাক্সেস করতে দেয়।
কোড উদাহরণ:
import org.apache.commons.lang3.tuple.Triple;
public class TripleExample {
public static void main(String[] args) {
// একটি Triple তৈরি
Triple<String, Integer, String> student = Triple.of("Alice", 90, "A");
// ডেটা অ্যাক্সেস
String name = student.getLeft();
int score = student.getMiddle();
String grade = student.getRight();
System.out.println("Name: " + name);
System.out.println("Score: " + score);
System.out.println("Grade: " + grade);
}
}
আউটপুট:
Name: Alice
Score: 90
Grade: A
কোড উদাহরণ:
import org.apache.commons.lang3.tuple.Pair;
import org.apache.commons.lang3.tuple.Triple;
import java.util.ArrayList;
import java.util.List;
public class ListExample {
public static void main(String[] args) {
// Pair লিস্ট
List<Pair<String, Integer>> students = new ArrayList<>();
students.add(Pair.of("John", 85));
students.add(Pair.of("Alice", 90));
for (Pair<String, Integer> student : students) {
System.out.println("Name: " + student.getLeft() + ", Score: " + student.getRight());
}
// Triple লিস্ট
List<Triple<String, Integer, String>> detailedStudents = new ArrayList<>();
detailedStudents.add(Triple.of("John", 85, "B"));
detailedStudents.add(Triple.of("Alice", 90, "A"));
for (Triple<String, Integer, String> student : detailedStudents) {
System.out.println("Name: " + student.getLeft() + ", Score: " + student.getMiddle() + ", Grade: " + student.getRight());
}
}
}
আউটপুট:
Name: John, Score: 85
Name: Alice, Score: 90
Name: John, Score: 85, Grade: B
Name: Alice, Score: 90, Grade: A
একাধিক রিটার্ন ভ্যালু: একটি মেথড থেকে একাধিক মান ফেরত দিতে পারে।
public static Pair<Integer, Integer> calculate(int a, int b) {
return Pair.of(a + b, a * b);
}
Feature | Pair | Triple |
---|---|---|
Element Count | 2 (Left, Right) | 3 (Left, Middle, Right) |
Complexity | কম | বেশি |
Usage Example | Key-Value Pair | Multi-dimensional Data |
Apache Commons Lang-এ Pair
এবং Triple
এর মতো টাপল ব্যবহার করে ডেটা সংরক্ষণ ও পরিচালনা করা সহজ হয়। এটি:
যদি ডেটা আরো জটিল হয়, তবে কাস্টম ক্লাস তৈরি করা উত্তম।
Javatuples হলো একটি তৃতীয় পক্ষের লাইব্রেরি, যা জাভাতে Tuple ব্যবহার করার সহজ এবং কার্যকর উপায় সরবরাহ করে। এটি বিভিন্ন ধরনের এবং বিভিন্ন সংখ্যার মান গোষ্ঠীভুক্ত করতে সাহায্য করে। Javatuples লাইব্রেরিতে 1 থেকে 10 টি ভ্যালু ধারণ করার জন্য বিভিন্ন Tuple ক্লাস সরবরাহ করা হয়েছে, যেমন Pair, Triplet, Quartet, ইত্যাদি।
Javatuples ব্যবহার করতে আপনার প্রকল্পে Maven Dependency যোগ করুন:
<dependency>
<groupId>org.javatuples</groupId>
<artifactId>javatuples</artifactId>
<version>1.2</version>
</dependency>
implementation 'org.javatuples:javatuples:1.2'
Javatuples-এ প্রধান Tuple ক্লাসগুলো:
import org.javatuples.Pair;
public class PairExample {
public static void main(String[] args) {
// একটি Pair তৈরি
Pair<String, Integer> pair = Pair.with("Alice", 25);
// মান অ্যাক্সেস করা
System.out.println("Name: " + pair.getValue0()); // Alice
System.out.println("Age: " + pair.getValue1()); // 25
}
}
import org.javatuples.Triplet;
public class TripletExample {
public static void main(String[] args) {
// একটি Triplet তৈরি
Triplet<String, Integer, String> triplet = Triplet.with("Alice", 25, "Engineer");
// মান অ্যাক্সেস করা
System.out.println("Name: " + triplet.getValue0()); // Alice
System.out.println("Age: " + triplet.getValue1()); // 25
System.out.println("Profession: " + triplet.getValue2()); // Engineer
}
}
import org.javatuples.Quartet;
public class QuartetExample {
public static void main(String[] args) {
// একটি Quartet তৈরি
Quartet<String, Integer, String, Boolean> quartet = Quartet.with("Alice", 25, "Engineer", true);
// মান অ্যাক্সেস করা
System.out.println("Name: " + quartet.getValue0()); // Alice
System.out.println("Age: " + quartet.getValue1()); // 25
System.out.println("Profession: " + quartet.getValue2()); // Engineer
System.out.println("Is Active: " + quartet.getValue3()); // true
}
}
import org.javatuples.Pair;
public class ModifyTupleExample {
public static void main(String[] args) {
Pair<String, Integer> pair = Pair.with("Alice", 25);
// নতুন Tuple তৈরি করা
Pair<String, Integer> updatedPair = pair.setAt0("Bob");
System.out.println("Updated Name: " + updatedPair.getValue0()); // Bob
}
}
import org.javatuples.Pair;
import java.util.List;
public class TupleToListExample {
public static void main(String[] args) {
Pair<String, Integer> pair = Pair.with("Alice", 25);
// Tuple থেকে List
List<Object> list = pair.toList();
System.out.println("List: " + list); // [Alice, 25]
}
}
import org.javatuples.Pair;
import java.util.Arrays;
public class ListToTupleExample {
public static void main(String[] args) {
// List থেকে Tuple তৈরি
Pair<String, Integer> pair = Pair.fromCollection(Arrays.asList("Alice", 25));
System.out.println("Name: " + pair.getValue0()); // Alice
System.out.println("Age: " + pair.getValue1()); // 25
}
}
মেথড | বর্ণনা |
---|---|
getValue(index) | নির্দিষ্ট ইনডেক্সের মান ফেরত দেয়। |
setAt(index, value) | একটি নতুন Tuple তৈরি করে নির্দিষ্ট ইনডেক্সে মান সেট করে। |
toList() | Tuple থেকে List তৈরি করে। |
fromCollection(collection) | Collection থেকে Tuple তৈরি করে। |
add(value) | Tuple-এ নতুন মান যোগ করে একটি বড় Tuple তৈরি করে। |
সুবিধা | অসুবিধা |
---|---|
একাধিক মান একত্রে প্যাকেজ করতে সুবিধা। | মান অ্যাক্সেস করার জন্য ইনডেক্স ব্যবহার কিছুটা জটিল। |
Immutable হওয়ায় ডেটা নিরাপদ। | বড় Tuple (5+ মান) পড়া বা ব্যবস্থাপনা কঠিন। |
Collection এর সাথে সহজ ইন্টিগ্রেশন। | জাভার স্ট্যান্ডার্ড লাইব্রেরিতে বিল্ট-ইন নয়। |
Javatuples লাইব্রেরি জাভাতে Tuple ইমপ্লিমেন্ট করার একটি শক্তিশালী এবং সহজ উপায়। এটি একাধিক মান একত্রে সংরক্ষণ, পাস করা, এবং রিটার্ন করার জন্য কার্যকর। ছোট এবং দ্রুত সমাধানের জন্য Javatuples অসাধারণ, তবে বড় এবং জটিল Tuple ব্যবস্থাপনার জন্য অন্য ডেটা স্ট্রাকচার বিবেচনা করা উচিত।
Javatuples হলো একটি থার্ড-পার্টি লাইব্রেরি যা জাভাতে Tuple এর কার্যকারিতা যোগ করে। এটি বিভিন্ন ধরনের Tuple (যেমন, Pair, Triplet, Quartet, ইত্যাদি) সরবরাহ করে। Maven বা Gradle ব্যবহার করে সহজেই এই লাইব্রেরি আপনার প্রোজেক্টে অন্তর্ভুক্ত করা যায়।
pom.xml
এ Dependency যোগ করাMaven ব্যবহারের সময় pom.xml
ফাইলে নিচের ডিপেন্ডেন্সি যুক্ত করুন:
<dependency>
<groupId>org.javatuples</groupId>
<artifactId>javatuples</artifactId>
<version>1.2</version>
</dependency>
Maven ব্যবহার করে আপনার প্রোজেক্টের ডিপেন্ডেন্সি আপডেট করুন:
mvn clean install
build.gradle
এ Dependency যোগ করাGradle ব্যবহারের সময় build.gradle
ফাইলে নিচের ডিপেন্ডেন্সি যুক্ত করুন:
dependencies {
implementation 'org.javatuples:javatuples:1.2'
}
Gradle ব্যবহার করে আপনার প্রোজেক্টের ডিপেন্ডেন্সি আপডেট করুন:
gradle build
import org.javatuples.Pair;
import org.javatuples.Triplet;
public class JavatuplesExample {
public static void main(String[] args) {
// Pair example
Pair<String, Integer> person = Pair.with("Alice", 30);
System.out.println("Name: " + person.getValue0());
System.out.println("Age: " + person.getValue1());
// Triplet example
Triplet<String, Integer, String> student = Triplet.with("Bob", 20, "Mathematics");
System.out.println("Student Name: " + student.getValue0());
System.out.println("Age: " + student.getValue1());
System.out.println("Subject: " + student.getValue2());
}
}
Name: Alice
Age: 30
Student Name: Bob
Age: 20
Subject: Mathematics
Pair
, Triplet
, Quartet
, ইত্যাদি।Maven এবং Gradle ব্যবহার করে সহজেই Javatuples অন্তর্ভুক্ত করা যায়। এটি জাভাতে Tuples এর অভাব পূরণ করে এবং ডেটা ম্যানিপুলেশন সহজ করে তোলে। আপনার প্রোজেক্টে Tuples ব্যবহারের জন্য এই লাইব্রেরি একটি নির্ভরযোগ্য সমাধান।
Read more