java মূল্য জোড়া একটি জাভা সংগ্রহ?(tuples?)



java jdk (12)

জাভা 9+

জাভা 9 এ, আপনি কেবল লিখতে পারেন: Map.entry(key, value) একটি অপরিবর্তনীয় জোড়া তৈরি করতে।

দ্রষ্টব্য: এই পদ্ধতিটি কী বা মানগুলিকে নাল হতে দেয় না। আপনি যদি Map.entry(key, Optional.ofNullable(value)) মানগুলি মঞ্জুর করতে চান, উদাহরণস্বরূপ, আপনি এটিকে এটিকে পরিবর্তন করতে চান: Map.entry(key, Optional.ofNullable(value))

জাভা 8+

জাভা 8 তে, আপনি আরও সাধারণ উদ্দেশ্য javafx.util.Pair করতে পারেন একটি javafx.util.Pair , সিরিয়ালযোগ্য জোড়া তৈরি করতে। এই ক্লাস নাল কী এবং নল মান অনুমতি দেয়। (জাভা 9, এই ক্লাস javafx.base মডিউল অন্তর্ভুক্ত করা হয়)। সম্পাদনা করুন: জাভা 11 হিসাবে, জাভাএফএক্সটি জেডিকে থেকে বাতিল করা হয়েছে, তাই আপনাকে অতিরিক্ত মেনন আর্টিফ্যাক্ট org.openjfx: javafx-base এর প্রয়োজন হবে।

জাভা 6+

জাভা 6 এবং তারপরে, আপনি একটি অপরিবর্তনীয় জোড়ার জন্য আরও ক্রমবর্ধমান AbstractMap.SimpleImmutableEntry ব্যবহার করতে পারেন, বা একটি জোড়াটির জন্য AbstractMap.SimpleEntry যার মান পরিবর্তন করা যেতে পারে। এই ক্লাসগুলি নল কী এবং নল মানগুলিও মঞ্জুরি দেয় এবং সিরিয়ালাইজেবল হয়।

অ্যান্ড্রয়েড

আপনি যদি Android এর জন্য লিখিত হন, তবে একটি Pair.create(key, value) জোড়া তৈরি করতে কেবল Pair.create(key, value) ব্যবহার করুন।

Apache কমন্স

Pair.of(key, value) Apache Commons Lang একটি Pair.of(key, value) , তুলনীয়, সিরিয়ালাইজেবল জোড়া তৈরি করতে সহায়ক Pair.of(key, value) করে।

Eclipse সংগ্রহ

আপনি যদি প্রাইমিটাইভ ধারণ করে এমন জোড়া ব্যবহার করেন তবে Eclipse Collections বেশ কার্যকর দক্ষ আদিম জোড়া ক্লাস সরবরাহ করে যা অক্ষম অটো-বক্সিং এবং অটো-অক্সবক্সিং এড়াবে।

উদাহরণস্বরূপ, আপনি IntIntPair তৈরি করতে একটি IntIntPair , অথবা PrimitiveTuples.pair(float, long) তৈরি করতে PrimitiveTuples.pair(int, int) ব্যবহার করতে পারেন।

প্রকল্প Lombok

প্রজেক্ট লম্বোক ব্যবহার করে আপনি লেখার মাধ্যমে কেবল একটি অপরিবর্তনীয় জোড়া তৈরি করতে পারেন:

@Value
public class Pair<K, V> {
    K key;
    V value;
}

hashCode() বাইটকোডে স্বয়ংক্রিয়ভাবে আপনার জন্য hashCode() , hashCode() , equals() , hashCode() , এবং hashCode() পূরণ করবে। যদি আপনি একটি কন্সট্রাকটর পরিবর্তে স্ট্যাটিক ফ্যাক্টরী পদ্ধতি চান, উদাহরণস্বরূপ, একটি Pair.of(k, v) , কেবল টীকাটি পরিবর্তন করুন: @Value(staticConstructor = "of")

অন্যভাবে

উপরের যে কোনও সমাধান আপনার নৌকাটি ভাসতে না থাকলে, আপনি কেবল নীচের কোডটি অনুলিপি এবং পেস্ট করতে পারেন (যা, গৃহীত উত্তরগুলিতে তালিকাভুক্ত শ্রেণির বিপরীতে, NullPointerExceptions এর বিরুদ্ধে রক্ষীরা):

import java.util.Objects;

public class Pair<K, V> {

    public final K key;
    public final V value;

    public Pair(K key, V value) {
        this.key = key;
        this.value = value;
    }

    public boolean equals(Object o) {
        return o instanceof Pair && Objects.equals(key, ((Pair<?,?>)o).key) && Objects.equals(value, ((Pair<?,?>)o).value);
    }

    public int hashCode() {
        return 31 * Objects.hashCode(key) + Objects.hashCode(value);
    }

    public String toString() {
        return key + "=" + value;
    }
}

https://ffff65535.com

আমি কিভাবে জাভা একটি মানচিত্র পছন্দ করি যেখানে আপনি মানচিত্রে প্রতিটি এন্ট্রির ধরন সংজ্ঞায়িত করতে পারেন, উদাহরণস্বরূপ <String, Integer>

আমি যা খুঁজছি তা সংগ্রহের একটি ধরন যেখানে সংগ্রহের প্রতিটি উপাদান মানগুলির একটি জোড়া। জোড়ার প্রতিটি মান তার নিজের টাইপ (উপরে স্ট্রিং এবং ইন্টিগ্রার উদাহরণের মতো) থাকতে পারে, যা ঘোষণার সময় সংজ্ঞায়িত করা হয়।

সংগ্রহটি তার প্রদত্ত আদেশ বজায় রাখবে এবং মানগুলির একটিটিকে একটি অনন্য কী (মানচিত্রে হিসাবে) হিসাবে বিবেচনা করবে না।

মূলত আমি টাইপ <String,Integer> বা অন্য কোন 2 ধরনের একটি ARRAY সংজ্ঞায়িত করতে সক্ষম হতে চাই।

আমি বুঝতে পারছি যে আমি একটি ক্লাস তৈরি করতে পারি তবে এর মধ্যে 2 টি ভেরিয়েবল রয়েছে, তবে এটি অত্যধিক ক্রিয়াপদ বলে মনে হয়।

আমি বুঝতে পারলাম যে আমি 2 ডি অ্যারে ব্যবহার করতে পারি, কিন্তু বিভিন্ন ধরণের ব্যবহারের কারণে আমাকে তাদের অবশ্যই অজেক্টের অ্যারে তৈরি করতে হবে এবং তারপরে আমাকে সর্বদা কাস্ট করতে হবে।

আমি শুধুমাত্র সংগ্রহে জোড়া জোড়া প্রয়োজন, তাই আমি শুধুমাত্র এন্ট্রি প্রতি দুটি মান প্রয়োজন। এই মত কিছু আছে শ্রেণী রুট যাচ্ছে না? ধন্যবাদ!



"আপ্যাচ কমন্স ল্যাং 3" Pair বর্গ এবং আপেক্ষিক সাবclasses সম্পর্কে কি?

    import org.apache.commons.lang3.tuple.ImmutablePair;
    import org.apache.commons.lang3.tuple.Pair;
    ...
    @SuppressWarnings("unchecked")
    Pair<String, Integer>[] arr = new ImmutablePair[]{
            ImmutablePair.of("A", 1),
            ImmutablePair.of("B", 2)};

    // both access the 'left' part
    String key = arr[0].getKey();
    String left = arr[0].getLeft();

    // both access the 'right' part
    Integer value = arr[0].getValue();
    Integer right = arr[0].getRight();

ImmutablePair একটি নির্দিষ্ট উপশ্রেণী যা জোড়াটির মানগুলি সংশোধন করতে অনুমতি দেয় না, তবে অন্যগুলি বিভিন্ন শব্দার্থিকের সাথে বাস্তবায়ন করে। আপনি যদি তাদের প্রয়োজন হয়, এই Maven কোঅর্ডিনেটস হয়।

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.4</version>
        </dependency>

Com.sun.tools.javac.util.Pair সম্পর্কে কি?


অ্যান্ড্রয়েডের জন্য উন্নয়নশীল যে কেউ, আপনি android.util.Pair ব্যবহার করতে পারেন। :)


অ্যাপাচি সাধারণ ল্যাং 3 এর জুড়ি জোড়া এবং এই থ্রেডে উল্লেখিত কয়েকটি লাইব্রেরি যা জাভাতে সি ++ জোড়া <এল, আর> এর সমতুল্য?

আপনার মূল প্রশ্ন থেকে প্রয়োজনীয়তা মিলেছে উদাহরণ:

List<Pair<String, Integer>> myPairs = new ArrayList<Pair<String, Integer>>();
myPairs.add(Pair.of("val1", 11));
myPairs.add(Pair.of("val2", 17));

//...

for(Pair<String, Integer> pair : myPairs) {
  //following two lines are equivalent... whichever is easier for you...
  System.out.println(pair.getLeft() + ": " + pair.getRight());
  System.out.println(pair.getKey() + ": " + pair.getValue());
}

আপনি এটি বর্ণনা করেছেন হিসাবে পছন্দসই সমাধান জোড়া তালিকা (যেমন তালিকা)।

এটি সম্পন্ন করার জন্য আপনি আপনার সংগ্রহে ব্যবহারের জন্য একটি জুড়ি তৈরি করবেন। এটি আপনার কোড বেস যোগ করার জন্য একটি দরকারী ইউটিলিটি ক্লাস।

সূর্য জেডিকে সবচেয়ে কাছের শ্রেণীটি একটি সাধারণ জুয়ার ক্লাসের মতো কার্যকারিতা প্রদান করে, এটি AbstractMap.SimpleEntry। আপনার নিজের জুয়ার ক্লাস তৈরির পরিবর্তে আপনি এই শ্রেণির ব্যবহার করতে পারেন, যদিও আপনাকে কিছু বেদনাদায়ক বিধিনিষেধের সাথে জীবনযাপন করতে হবে এবং আমার মনে হয় বেশিরভাগ লোকেরা এটি সহজভাবে সিম্পলইনন্ট্রি এর উদ্দেশ্যে ভূমিকা পালন করবে না। উদাহরণস্বরূপ SimpleEntry এর কোনও "setkey ()" পদ্ধতি এবং কোন ডিফল্ট কনস্ট্রাক্টর নেই, তাই আপনি এটি খুব সীমিত দেখতে পাচ্ছেন।

মনে রাখবেন যে সংগ্রহগুলি একক ধরণের উপাদান ধারণ করার জন্য ডিজাইন করা হয়েছে। মানচিত্রের মতো সম্পর্কিত ইউটিলিটি ইন্টারফেস আসলে সংগ্রহ নয় (অর্থাত ম্যাপ সংগ্রহ ইন্টারফেসটি বাস্তবায়িত করে না)। একটি জুড়ি সংগ্রহ ইন্টারফেসটি বাস্তবায়ন করবে না তবে স্পষ্টতই বৃহত্তর তথ্য কাঠামো তৈরির ক্ষেত্রে এটি একটি কার্যকর শ্রেণী।


আমি জিজ্ঞেস করতে যাচ্ছি আপনি শুধু একটি List<Pair<T, U>> ব্যবহার করতে চান না? কিন্তু তারপর, অবশ্যই, জেডিকে একটি জোড়া <> বর্গ নেই। কিন্তু একটি দ্রুত গুগল উভয় Wikipedia , এবং forums.sun.com উভয় পাওয়া যায়। চিয়ার্স


এটি জাভাহেলপ4uের কোড ভিত্তিক।

কম verbose এবং কিভাবে একটি লাইন এবং জিনিস উপর লুপ কিভাবে কাজ করে।

//======>  Imports
import java.util.AbstractMap.SimpleEntry;
import java.util.ArrayList;
import java.util.List;
import java.util.Map.Entry;

//======>  Single Entry
SimpleEntry<String, String> myEntry = new SimpleEntry<String, String>("ID", "Text");
System.out.println("key: " + myEntry.getKey() + "    value:" + myEntry.getValue());
System.out.println();

//======>  List of Entries
List<Entry<String,String>> pairList = new ArrayList<>();

//-- Specify manually
Entry<String,String> firstButton = new SimpleEntry<String, String>("Red ", "Way out");
pairList.add(firstButton);

//-- one liner:
pairList.add(new SimpleEntry<String,String>("Gray", "Alternate route"));  //Ananomous add.

//-- Iterate over Entry array:
for (Entry<String, String> entr : pairList) {
    System.out.println("Button: " + entr.getKey() + "    Label: " + entr.getValue());
}

কী / মান জোড়াগুলির কথা বলার সময় আমার মনের প্রথম জিনিসটি হল প্রোপার্টি ক্লাস যেখানে আপনি সঞ্চয় এবং ফাইলটি স্ট্রিম / ফাইলে আইটেম লোড করতে পারেন।


প্রকল্প রিঅ্যাক্টর (io.projectreactor: reactor-core) এন-টিপলগুলির জন্য উন্নত সমর্থন রয়েছে:

Tuple2<String, Integer> t = Tuples.of("string", 1)

সেখানে আপনি t.getT1(), t.getT2(), ... পেতে পারেন t.getT1(), t.getT2(), ... বিশেষত স্ট্রীম বা ফ্লক্সের সাথে আপনি এমনকি টিপেল উপাদানের মানচিত্রও t.getT1(), t.getT2(), ... পারেন:

Stream<Tuple2<String, Integer>> s;
s.map(t -> t.mapT2(i -> i + 2));

শুধু একটি বর্গ তৈরি করুন

class tuples 
{ 
int x;
int y;
} 

তারপর tuples এই বস্তুর তালিকা তৈরি করুন

List<tuples> list = new ArrayList<tuples>();

তাই আপনি একইভাবে অন্যান্য নতুন তথ্য কাঠামো বাস্তবায়ন করতে পারেন।





java