Tuples হলো একটি ডেটা স্ট্রাকচার যা বিভিন্ন ধরনের (heterogeneous) একাধিক মান (values) ধারণ করতে পারে। এটি সাধারণত immutable হয় এবং একটি container হিসেবে কাজ করে। জাভায় Tuples সরাসরি সমর্থিত নয়, তবে এটি বিভিন্ন লাইব্রেরি এবং কাস্টম ইমপ্লিমেন্টেশনের মাধ্যমে ব্যবহার করা যায়।
Tuples এর বৈশিষ্ট্য
- Fixed Size: Tuples এর আকার (size) স্থির থাকে।
- Heterogeneous Types: Tuples বিভিন্ন ধরনের ডেটা রাখতে পারে।
- Immutable (সাধারণত): Tuples তৈরি হওয়ার পরে পরিবর্তন করা যায় না।
Java তে Tuples এর ব্যবহার
১. Apache Commons Lang লাইব্রেরি দিয়ে Tuples
Apache Commons Lang লাইব্রেরি Pair এবং Triple ক্লাস সরবরাহ করে।
Dependency (Maven):
<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 TupleExample {
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, "Engineer");
System.out.println("Name: " + triple.getLeft());
System.out.println("Age: " + triple.getMiddle());
System.out.println("Profession: " + triple.getRight());
}
}
আউটপুট:
Name: Alice
Age: 30
Name: Bob
Age: 25
Profession: Engineer
২. JavaFX Pair
JavaFX লাইব্রেরিতে একটি Pair ক্লাস আছে যা দুটি মান ধারণ করতে পারে।
কোড উদাহরণ:
import javafx.util.Pair;
public class JavaFXTupleExample {
public static void main(String[] args) {
Pair<String, Double> product = new Pair<>("Laptop", 799.99);
System.out.println("Product: " + product.getKey());
System.out.println("Price: $" + product.getValue());
}
}
আউটপুট:
Product: Laptop
Price: $799.99
৩. কাস্টম Tuples তৈরি
আপনি নিজের Tuples ক্লাস তৈরি করতে পারেন যা বিভিন্ন আকারের ডেটা ধারণ করতে পারে।
কোড উদাহরণ:
public class Tuple<A, B> {
private final A first;
private final B second;
public Tuple(A first, B second) {
this.first = first;
this.second = second;
}
public A getFirst() {
return first;
}
public B getSecond() {
return second;
}
}
public class CustomTupleExample {
public static void main(String[] args) {
Tuple<String, Integer> student = new Tuple<>("John", 20);
System.out.println("Name: " + student.getFirst());
System.out.println("Age: " + student.getSecond());
}
}
আউটপুট:
Name: John
Age: 20
৪. Vavr লাইব্রেরি দিয়ে Tuples
Vavr একটি শক্তিশালী লাইব্রেরি যা Tuples সমর্থন করে এবং 1 থেকে 8 মান পর্যন্ত ধারণ করতে পারে।
Dependency (Maven):
<dependency>
<groupId>io.vavr</groupId>
<artifactId>vavr</artifactId>
<version>0.10.4</version>
</dependency>
কোড উদাহরণ:
import io.vavr.Tuple;
import io.vavr.Tuple2;
public class VavrTupleExample {
public static void main(String[] args) {
// Tuple with 2 values
Tuple2<String, Integer> tuple = Tuple.of("Alice", 25);
System.out.println("Name: " + tuple._1);
System.out.println("Age: " + tuple._2);
// Tuple with 3 values
var triple = Tuple.of("Bob", 30, "Engineer");
System.out.println("Name: " + triple._1);
System.out.println("Age: " + triple._2);
System.out.println("Profession: " + triple._3);
}
}
আউটপুট:
Name: Alice
Age: 25
Name: Bob
Age: 30
Profession: Engineer
Tuples এর সাধারণ ব্যবহার
ডেটা পাসিং: একাধিক মান মেথড থেকে রিটার্ন করার জন্য।
public static Pair<Integer, Integer> getMinMax(int[] arr) { int min = Arrays.stream(arr).min().getAsInt(); int max = Arrays.stream(arr).max().getAsInt(); return Pair.of(min, max); }- API Integration: JSON বা অন্যান্য ডেটা স্ট্রাকচার থেকে ডেটা রিটার্ন করার জন্য।
- লিস্ট বা ম্যাপের বিকল্প: যেখানে লিস্ট বা ম্যাপ ব্যবহার করা জটিল।
Tuples ব্যবহারের সুবিধা এবং অসুবিধা
সুবিধা:
- একাধিক ডেটা টাইপ ধারণ করতে সক্ষম।
- কোড সরল এবং সংক্ষিপ্ত করে।
- Immutable হওয়ার কারণে থ্রেড-সেফ।
অসুবিধা:
- নামবিহীন (unnamed) হওয়ায় ডেটা পড়া এবং বোঝা কঠিন।
- বড় Tuples ব্যবহারে কোড জটিল হতে পারে।
- JDK-তে সরাসরি Tuples সাপোর্ট নেই।
- Tuples ডেটা পাস এবং রিটার্ন করার একটি কার্যকর পদ্ধতি যেখানে একাধিক ভিন্ন ডেটা টাইপের মান প্রয়োজন।
- জাভায় Tuples ব্যবহার করার জন্য Apache Commons Lang, JavaFX Pair, এবং Vavr লাইব্রেরি একটি চমৎকার সমাধান।
- কাস্টম Tuples ইমপ্লিমেন্টেশন দিয়ে আপনার নির্দিষ্ট প্রয়োজন মেটানো সম্ভব। তবে বড় Tuples ব্যবহারের আগে বিকল্প ডেটা স্ট্রাকচার (যেমন ক্লাস) বিবেচনা করা উচিত।
Read more