একটি জাভা সংকলন মান জোড়া? (Tuples?)


345

আমি পছন্দ করি জাভাতে কীভাবে মানচিত্র রয়েছে যেখানে আপনি মানচিত্রের প্রতিটি প্রবেশের প্রকারগুলি সংজ্ঞায়িত করতে পারেন <String, Integer>

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

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

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

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

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

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


আমি ভাবছি পেয়ারাও এর জন্য ক্লাস করতে পারে।
সিকোরস্কি

পেয়ারা বেশ বিরোধী - Pairএবং গুগলের লোকেরা আরও ভাল বিকল্প - অটো / মান তৈরি করতে চলে গেছে । এটি আপনাকে যথাযথ সমান / হ্যাশকোড শব্দার্থবিজ্ঞান সহ সহজেই ভাল টাইপযুক্ত মান ধরণের শ্রেণি তৈরি করতে দেয় । আপনার আর কখনও Pairটাইপের দরকার পড়বে না!
Dimo414

উত্তর:


255

জুটি ক্লাস হ'ল সেই "গিম্ম" জেনারিক উদাহরণগুলির মধ্যে একটি যা আপনার নিজের হাতে লেখার পক্ষে যথেষ্ট সহজ। উদাহরণস্বরূপ, আমার মাথার উপরের অংশটি বন্ধ করে দিন:

public class Pair<L,R> {

  private final L left;
  private final R right;

  public Pair(L left, R right) {
    assert left != null;
    assert right != null;

    this.left = left;
    this.right = right;
  }

  public L getLeft() { return left; }
  public R getRight() { return right; }

  @Override
  public int hashCode() { return left.hashCode() ^ right.hashCode(); }

  @Override
  public boolean equals(Object o) {
    if (!(o instanceof Pair)) return false;
    Pair pairo = (Pair) o;
    return this.left.equals(pairo.getLeft()) &&
           this.right.equals(pairo.getRight());
  }

}

এবং হ্যাঁ, এটি নেট এবং একাধিক জায়গায় সম্পূর্ণতা এবং বৈশিষ্ট্যের বিভিন্ন ডিগ্রী সহ বিদ্যমান। (উপরের আমার উদাহরণটি অপরিবর্তনীয় বলে মনে করা হয়েছে))


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

43
উম ... না এটা হবে না। ক্ষেত্রগুলি চূড়ান্ত হিসাবে চিহ্নিত হয়েছে, তাই তাদের পুনরায় নিয়োগ দেওয়া যাবে না। এবং এটি থ্রেডসেফ নয় কারণ 'বাম' এবং 'ডান' পরিবর্তনযোগ্য হতে পারে। GetLeft () / getRight () প্রতিরক্ষামূলক অনুলিপিগুলি (এই ক্ষেত্রে ব্যবহারহীন) ফিরিয়ে না নিলে বড় জিনিসটি কী তা আমি দেখছি না।
আউটলা প্রোগ্রামার

17
নোট করুন যে হ্যাশকোড () যেমনটি বাম এবং ডান অদলবদল করা হয় একই মান দেয়। সম্ভবত:long l = left.hashCode() * 2654435761L; return (int)l + (int)(l >>> 32) + right.hashCode();
কর্মকাজে

68
সুতরাং আমি যদি সঠিকভাবে বুঝতে পারি তবে একটি সহজ জোড় শ্রেণীর ঘূর্ণায়মান একটি সিনট্যাক্স ত্রুটি, একটি সাবপার হ্যাশকোড পদ্ধতি, নাল পয়েন্টার ব্যতিক্রম, কোনও তুলনা করার পদ্ধতি, নকশা প্রশ্নাবলী ... এবং লোকেদের এখনও এই ক্লাসটি অ্যাপাচি কমোনগুলিতে বিদ্যমান থাকার সময় রোলিংয়ের পক্ষে পরামর্শ দেয়। দয়া করে, আপনি যদি জেআর অন্তর্ভুক্ত করতে না চান তবে চাকাটি পুনরায় উদ্ভাবন করা বন্ধ করুন, কেবল কোডটি অনুলিপি করুন!
cquezel

38
"আপনার নিজের হাতে লেখার পক্ষে যথেষ্ট সহজ" এর অর্থ কী? এটা ভয়ানক সফটওয়্যার ইঞ্জিনিয়ারিং। মাইপায়ার এবং উইমেনএলিসপায়ারের মধ্যে রূপান্তর করার জন্য N ^ 2 অ্যাডাপ্টারের ক্লাসগুলি কী নিজেরাই লিখতে যথেষ্ট সহজ বলে বিবেচিত হয়?
djechlin

299

AbstractMap.SimpleEntry

আপনি সহজেই এটি সন্ধান করছেন:

java.util.List<java.util.Map.Entry<String,Integer>> pairList= new java.util.ArrayList<>();

আপনি কিভাবে এটি পূরণ করতে পারেন?

java.util.Map.Entry<String,Integer> pair1=new java.util.AbstractMap.SimpleEntry<>("Not Unique key1",1);
java.util.Map.Entry<String,Integer> pair2=new java.util.AbstractMap.SimpleEntry<>("Not Unique key2",2);
pairList.add(pair1);
pairList.add(pair2);

এটি সরল করে:

Entry<String,Integer> pair1=new SimpleEntry<>("Not Unique key1",1);
Entry<String,Integer> pair2=new SimpleEntry<>("Not Unique key2",2);
pairList.add(pair1);
pairList.add(pair2);

এবং, একটি createEntryপদ্ধতির সাহায্যে, ভার্বোসটি আরও কমিয়ে আনতে পারে:

pairList.add(createEntry("Not Unique key1", 1));
pairList.add(createEntry("Not Unique key2", 2));

যেহেতু ArrayListচূড়ান্ত নয়, এটি একটি ofপদ্ধতি (এবং পূর্বোক্ত createEntryপদ্ধতি) প্রকাশের জন্য উপশৃঙ্খল করা যেতে পারে , যার ফলে সিনট্যাক্টিকভাবে সংশ্লেষ ঘটে:

TupleList<java.util.Map.Entry<String,Integer>> pair = new TupleList<>();
pair.of("Not Unique key1", 1);
pair.of("Not Unique key2", 2);

11
এফওয়াইআই: পরামর্শ দেওয়া SimpleEntryহয়েছে যে setValueঅপরিবর্তনীয় হওয়ার জন্য একটি ভাইবোন শ্রেণি বাদ দেওয়ার পদ্ধতি রয়েছে। এইভাবে নাম SimpleImmutableEntry
বেসিল বাউর্কে

3
এটি স্ব-বাস্তবায়নের চেয়ে ভাল। বাস্তবায়ন করা সহজ যে সত্য তা প্রতিবার প্রয়োগের অজুহাত নয়।
প্যাভোগাম

6
আমি এটিকে "স্ট্যান্ডার্ড" বিবেচনা করব না। Entryএকটি মূল-মান জুড়ি বোঝানো হয়, এবং এটি জন্য এটি দুর্দান্ত। তবে সত্যিকারের টিপল হিসাবে এটি দুর্বলতা রয়েছে। উদাহরণস্বরূপ, hashcodeবাস্তবায়নের SimpleEntryউপাদানগুলির কোডগুলিতে কেবল xors, তাই <a,b>একই মান হিসাবে hashes <b,a>। টুপল বাস্তবায়ন প্রায়শই শব্দকোষ অনুসারে বাছাই SimpleEntry করে তবে প্রয়োগ করে না Comparable। সুতরাং সেখানে সতর্কতা অবলম্বন করুন ...
জেন

167

জাভা 9+

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

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


জাভা 8+

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


জাভা 6+

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


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

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


অ্যাপাচি কমন্স

Apache Commons LangPair.of(key, value)অপরিবর্তনীয়, তুলনামূলক, সিরিয়ালাইজযোগ্য জুটি তৈরি করতে সহায়ক সরবরাহ করে ।


গ্রহগ্রহের সংগ্রহ

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

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


প্রকল্প লম্বোক

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

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

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


অন্যভাবে

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

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;
    }
}

3
জাভাএফএক্স হ'ল ডেস্কটপ-কেবল, অ ডেস্কটপ এনভায়রনমেন্টগুলির (যেমন সার্ভার) জন্য অপ্রয়োজনীয় নির্ভরতা যুক্ত করে।
foo

2
Eclipse সংগ্রহে Pairবস্তুর জন্য একটি ইন্টারফেসও রয়েছে , যা কল করে তা ইনস্ট্যান্ট করা যেতে পারে Tuples.pair(object1, object2)eclipse.org/collections/javadoc/9.2.0/org/eclipse/collections/…
ডোনাল্ড রাব

2
এটি সত্যই জাভা-এস্কু উত্তরের মতো অনুভব করে। সমস্ত উপলব্ধ বাস্তবায়ন। খুব পুরোপুরি, অনেক ধন্যবাদ!
মাইক 22

হাই @ হান্স আমি একটি তালিকা ব্যবহার করছি List<Pair<Integer, String> listOfTuple। আমি কীভাবে ব্যবহার করব listOfTuple.add()? আমি যদি করি - তবে listOfTuple.add(Pair<someInteger, someString>);এটি কার্যকর হবে না। আগাম ধন্যবাদ.
মে_ডিভুলার

অ্যান্ড্রয়েড সংস্করণ ইউনিট পরীক্ষায় উপলভ্য নয়, যা এটি সত্যিই দরকারী নয় ...
ওজনওগ

64

Map.Entry

এই অন্তর্নির্মিত ক্লাসগুলিও একটি বিকল্প। উভয়ই Map.Entryইন্টারফেস প্রয়োগ করে ।

মানচিত্রের ইউএমএল ডায়াগ্রাম implementing


10
এগুলি কেবল একটি বিকল্প নয়, তারা সঠিক উত্তর। আমি মনে করি কিছু লোক কেবল চাকা পুনরুদ্ধার করতে পছন্দ করে।
কার্টেনডগ

31

অ্যাপাচি কমন ল্যাঙ্গ 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());
}

1
অ্যাপাচি কমন্স উপলব্ধ থাকলে এটি সহজ বিকল্প।
কিপ


15

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

    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একটি নির্দিষ্ট সাবক্লাস যা জোড়ের মানগুলিকে সংশোধন করার অনুমতি দেয় না, তবে বিভিন্ন শব্দার্থক সহ অন্যান্য প্রয়োগ রয়েছে। আপনার যদি প্রয়োজন হয় তবে এগুলি হ'ল মাভেন স্থানাঙ্ক।

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

11

আপনি জেনেরিক পেয়ার <এ, বি> ক্লাস লিখতে এবং এটি একটি অ্যারে বা তালিকায় ব্যবহার করতে পারেন। হ্যাঁ, আপনাকে একটি ক্লাস লিখতে হবে, তবে আপনি একই ধরণের সমস্ত ধরণের জন্য পুনরায় ব্যবহার করতে পারেন, তাই আপনাকে কেবল একবার এটি করতে হবে।


আমি এর একটি উদাহরণ দেখতে চাই!
DivideByHero

1
ড্যান, এ সম্পর্কে খারাপ জিনিসটি হ'ল উদাহরণস্বরূপ কেবল জুটি <স্ট্রিং, পূর্ণসংখ্যক> এর ক্ষয় টাইপের কারণে গ্রহণ করা সম্ভব নয়, তাই না? তবে জাভা ...
জোহানেস ওয়েইস

আকর্ষণীয়, জোহানেস। java.sun.com/docs/books/tutorial/java/generics/erasure.html
JMD

আমি মনে করি না এটি সরল অ্যারেগুলির জন্য কাজ করবে তবে এটি অবশ্যই অন্যান্য সংগ্রহের জন্য কাজ করবে।
আউটলা প্রোগ্রামার

@ আউটলা প্রোগ্রামার: ভাল কথা, আপনি এটি অ্যারে ব্যবহার করতে পারেন তবে এটি জঘন্য কারণ আপনাকে জেনেরিক অ্যারে তৈরি করতে হ্যাক ব্যবহার করতে হবে।
ড্যান ডায়ার

7

অন্য উত্তরগুলিতে প্রসারিত করার সাথে একটি জেনেরিক অপরিবর্তনীয় জোড়ের স্থির পদ্ধতি থাকা উচিত যাতে কনস্ট্রাক্টরের সাথে কল দিয়ে আপনার কোডটি ছড়িয়ে দেওয়া এড়াতে পারে:

class Pair<L,R> {
      final L left;
      final R right;

      public Pair(L left, R right) {
        this.left = left;
        this.right = right;
      }

      static <L,R> Pair<L,R> of(L left, R right){
          return new Pair<L,R>(left, right);
      }
}

আপনি যদি স্ট্যাটিক পদ্ধতিটির নাম রাখেন "এর" বা "পেয়ারআফ" কোডটি সাবলীল হয়ে যায় কারণ আপনি লিখতে পারেন:

    list.add(Pair.of(x,y)); // my preference
    list.add(pairOf(x,y)); // use with import static x.y.Pair.pairOf

এটি সত্যিকারের লজ্জার বিষয় যে মূল জাভা লাইব্রেরিগুলি এ জাতীয় জিনিসের উপর এতই কম বিরল যে আপনাকে এই জাতীয় মৌলিক জিনিসগুলি করতে কমন্স-ল্যাং বা অন্যান্য 3 য় পক্ষ ব্যবহার করতে হবে। স্কালায় আপগ্রেড করার আরও একটি কারণ ...


6

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


6

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

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

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

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


আমি এই সমাধানটি জেনেরিক পেয়ার <কে, ভি> এর সাথে "বিজয়ী" এর চেয়ে ভাল। এটি অনুরোধ করা সমস্ত কিছু করে এবং বাক্স থেকে বেরিয়ে আসে। আমি এটি আমার প্রয়োগের জন্য ব্যবহার করি।
Sauer

5

এটি জাভাহেলপুটু'র কোডের উপর ভিত্তি করে।

কম ভার্বোস এবং কীভাবে এক লাইনে কীভাবে করা যায় এবং কীভাবে জিনিসগুলিতে লুপ করা যায় তা দেখায়।

//======>  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());
}


4

যেমন একটি ক্লাস তৈরি

class tuples 
{ 
int x;
int y;
} 

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

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

সুতরাং আপনি একইভাবে অন্যান্য নতুন ডেটা স্ট্রাকচার প্রয়োগ করতে পারেন।


4

আমি বোঝাতে চাইছি Pairজাভাতে কোনও ক্লাস না থাকলেও কিছু সুন্দর সিমিলার রয়েছে:Map.Entry

মানচিত্র.এন্ট্রি ডকুমেন্টেশন

এটি (বেশ কিছুটা সরলীকরণ করা) কোনটি HashMapবা আসলে কোনও Mapস্টোর।

আপনি Mapএটিতে আপনার মান সংরক্ষণ করতে পারেন এবং এন্ট্রি সেট পেতে পারেন। আপনি Set<Map.Entry<K,V>>যা চান তা কার্যকরভাবে শেষ হবে ।

তাই:

public static void main(String []args)
{    
    HashMap<String, Integer> values = new HashMap<String,Integer>();
    values.put("A", 235);//your custom data, the types may be different
    //more data insertions....
    Set<Map.Entry<String,Integer>> list = values.entrySet();//your list 
    //do as you may with it
}

এই বিকল্পটিতে অনন্য কীগুলির সমস্যা রয়েছে। ধরা যাক আপনার ব্যক্তির বৈশিষ্ট্য রয়েছে (যেমন {(person1, "নীল চোখের"), (ব্যক্তি 1, "লাল কেশিক", (ব্যক্তি 2, "সংক্ষিপ্ত")) (ব্যক্তি 2, "দ্রুত-চিন্তাবিদ") would) এগুলি মানচিত্রে জোড়া হিসাবে রাখতে সক্ষম হবেন না, যেহেতু প্রতিটি ব্যক্তি মানচিত্রের মূল চাবিকাঠি এবং কেবল ব্যক্তি হিসাবে কেবল একটি বৈশিষ্ট্যই মঞ্জুরি দেয়
ম্যানুয়েলভিগার্চিয়া

2

স্প্রিং Pair<S,T>-এর ডেটা ইউটিলেস প্যাকেজে একটি প্রকার রয়েছেorg.springframework.data.util

Pair<String,Integer> pair = Pair.of("Test", 123);
System.out.println(pair.getFirst());
System.out.println(pair.getSecond());

0

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


7
এই ধরণটি সরঞ্জামগুলিতে রয়েছে - জাভাক সংকলকটির "সান" প্রয়োগের অংশ। এটি কেবল জেডিকে অংশ হিসাবে বিতরণ করা হয়েছে, অন্যান্য বিক্রেতাদের বাস্তবায়নে উপস্থিত নাও থাকতে পারে এবং পাবলিক এপিআইয়ের অংশ হওয়ার সম্ভাবনা নেই।
ম্যাকডোয়েল

0

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


0

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

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

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

Stream<Tuple2<String, Integer>> s;
s.map(t -> t.mapT2(i -> i + 2));
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.