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




জাভা java runtime environment (15)

Map.Entry

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

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

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

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

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

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

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

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


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 চূড়ান্ত নয়, তাই এটি পদ্ধতির (এবং createEntry পদ্ধতি) প্রকাশ করার জন্য উপশ্রেণীবদ্ধ করা যেতে পারে, যার ফলে সিন্ট্যাক্টিক্যালি টেরেস হয়:

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

আমি বলতে চাচ্ছি, যদিও জাভাতে কোন Pair ক্লাস নেই তবে বেশ কিছুটা Map.Entry : Map.Entry

Map.Entry ডকুমেন্টেশন

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

আপনি Map আপনার মানগুলির একটি উদাহরণ তৈরি করতে পারেন এবং এন্ট্রি সেট পেতে পারেন। আপনি একটি Set<Map.Entry<K,V>> দিয়ে শেষ হয়ে 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
}

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

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

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

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

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


অ্যাপাচি সাধারণ ল্যাং 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());
}

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


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


আপনি একটি জেনেরিক জুড়ি <A, B> বর্গ লিখতে এবং একটি অ্যারে বা তালিকায় এটি ব্যবহার করতে পারেন। হ্যাঁ, আপনাকে একটি ক্লাস লিখতে হবে, তবে আপনি একই শ্রেণীর জন্য সব ধরণের পুনঃব্যবহার করতে পারেন, তাই আপনাকে কেবল একবার এটি করতে হবে।


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


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

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

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

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


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


জুড়ি ক্লাস তাদের "gimme" জেনেরিক উদাহরণগুলির মধ্যে একটি যা আপনার নিজের পক্ষে যথেষ্ট সহজ। উদাহরণস্বরূপ, আমার মাথা উপরের বন্ধ:

public class Pair<L,R> {

  private final L left;
  private final R right;

  public Pair(L left, R right) {
    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());
  }

}

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


"আপ্যাচ কমন্স ল্যাং 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>

এটি জাভাহেলপ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());
}





java