software - জাভা java runtime environment




একই কী অধীন একাধিক মান সঙ্গে হ্যাশম্যাপ (13)

অপাচ কমন্স থেকে MultiValuedMap ব্যবহার করা আরেকটি চমৎকার পছন্দ। বিশেষ বাস্তবায়ন জন্য পৃষ্ঠার শীর্ষে সমস্ত পরিচিত বাস্তবায়ন ক্লাস দেখুন

উদাহরণ:

HashMap<K, ArrayList<String>> map = new HashMap<K, ArrayList<String>>()

সঙ্গে প্রতিস্থাপিত হতে পারে

MultiValuedMap<K, String> map = new MultiValuedHashMap<K, String>();

সুতরাং,

map.put(key, "A");
map.put(key, "B");
map.put(key, "C");

Collection<String> coll = map.get(key);

"A", "B", এবং "C" ধারণকারী সংগ্রহ coll স্থাপিত হবে।

আমাদের জন্য একটি কী এবং দুটি মান সহ একটি হ্যাশম্যাপ বাস্তবায়ন করা সম্ভব। ঠিক যেমন হ্যাশম্যাপ?

দয়া করে আমাকে সাহায্য করুন (যদি কোন উপায় না থাকে) কীভাবে তিনটি মানের স্টোরেজটি কী হিসাবে কীভাবে বাস্তবায়ন করার অন্য কোন উপায় প্রয়োগ করে?


আপনি স্প্রিং ফ্রেমওয়ার্ক ব্যবহার করেন। সেখানে আছে: org.springframework.util.MultiValueMap

Unmodifiable বহু মানচিত্র তৈরি করতে:

Map<String,List<String>> map = ...
MultiValueMap<String, String> multiValueMap = CollectionUtils.toMultiValueMap(map);

অথবা org.springframework.util.LinkedMultiValueMap ব্যবহার org.springframework.util.LinkedMultiValueMap


আপনি করতে পারেন:

  1. মান হিসাবে একটি তালিকা আছে এমন একটি মানচিত্র ব্যবহার করুন। Map<KeyType, List<ValueType>>
  2. একটি নতুন মোড়ক বর্গ তৈরি করুন এবং মানচিত্রে এই মোড়কের দৃষ্টান্ত স্থাপন করুন। Map<KeyType, WrapperType>
  3. ক্লাস মত একটি tuple ব্যবহার করুন (wrappers প্রচুর তৈরি সংরক্ষণ)। Map<KeyType, Tuple<Value1Type, Value2Type>>
  4. পাশাপাশি পার্শ্ববর্তী মানচিত্র ব্যবহার করুন।

উদাহরণ

মান হিসাবে তালিকা সঙ্গে মানচিত্র

// create our map
Map<String, List<Person>> peopleByForename = new HashMap<>();    

// populate it
List<Person> people = new ArrayList<>();
people.add(new Person("Bob Smith"));
people.add(new Person("Bob Jones"));
peopleByForename.put("Bob", people);

// read from it
List<Person> bobs = peopleByForename["Bob"];
Person bob1 = bobs[0];
Person bob2 = bobs[1];

এই পদ্ধতির সাথে অসুবিধাটি হল তালিকাটি ঠিক দুটি মানের সাথে আবদ্ধ নয়।

2. মোড়ানো ক্লাস ব্যবহার করে

// define our wrapper
class Wrapper {
    public Wrapper(Person person1, Person person2) {
       this.person1 = person1;
       this.person2 = person2;
    }

    public Person getPerson1 { return this.person1; }
    public Person getPerson2 { return this.person2; }

    private Person person1;
    private Person person2;
}

// create our map
Map<String, Wrapper> peopleByForename = new HashMap<>();

// populate it
Wrapper people = new Wrapper();
peopleByForename.put("Bob", new Wrapper(new Person("Bob Smith"),
                                        new Person("Bob Jones"));

// read from it
Wrapper bobs = peopleByForename.get("Bob");
Person bob1 = bobs.getPerson1;
Person bob2 = bobs.getPerson2;

এই পদ্ধতির অসুবিধা আপনাকে এই খুব সাধারণ ধারক শ্রেণীর জন্য অনেক বয়লার-প্লেট কোড লিখতে হবে।

3. একটি টুপি ব্যবহার করে

// you'll have to write or download a Tuple class in Java, (.NET ships with one)

// create our map
Map<String, Tuple2<Person, Person> peopleByForename = new HashMap<>();

// populate it
peopleByForename.put("Bob", new Tuple2(new Person("Bob Smith",
                                       new Person("Bob Jones"));

// read from it
Tuple<Person, Person> bobs = peopleByForename["Bob"];
Person bob1 = bobs.Item1;
Person bob2 = bobs.Item2;

এই আমার মতে সেরা সমাধান।

4. একাধিক মানচিত্র

// create our maps
Map<String, Person> firstPersonByForename = new HashMap<>();
Map<String, Person> secondPersonByForename = new HashMap<>();

// populate them
firstPersonByForename.put("Bob", new Person("Bob Smith"));
secondPersonByForename.put("Bob", new Person("Bob Jones"));

// read from them
Person bob1 = firstPersonByForename["Bob"];
Person bob2 = secondPersonByForename["Bob"];

এই সমাধানটির অসুবিধা হ'ল এটি দুটি স্পষ্ট নয় যে দুটি মানচিত্র সম্পর্কিত, একটি প্রোগ্রাম্যাটিক ত্রুটি দুটি মানচিত্র সিঙ্ক থেকে বের হতে পারে।


আমরা একাধিক কী বা মান আছে একটি বর্গ তৈরি করতে এবং এই শ্রেণীর বস্তু মানচিত্রে একটি পরামিতি হিসাবে ব্যবহার করা যেতে পারে। আপনি https://.com/a/44181931/8065321 উল্লেখ করতে পারেন


আমি উদ্দেশ্য সি-তে ডেটা অভিধানের সাথে এটি করার জন্য খুব বেশি ব্যবহার করেছি। অ্যান্ড্রয়েডের জন্য জাভাতে অনুরূপ ফলাফল পাওয়া কঠিন ছিল। আমি একটি কাস্টম ক্লাস তৈরি শেষ পর্যন্ত, এবং তারপর শুধু আমার কাস্টম বর্গ একটি হ্যাশম্যাপ করছেন।

public class Test1 {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.addview);

//create the datastring
    HashMap<Integer, myClass> hm = new HashMap<Integer, myClass>();
    hm.put(1, new myClass("Car", "Small", 3000));
    hm.put(2, new myClass("Truck", "Large", 4000));
    hm.put(3, new myClass("Motorcycle", "Small", 1000));

//pull the datastring back for a specific item.
//also can edit the data using the set methods.  this just shows getting it for display.
    myClass test1 = hm.get(1);
    String testitem = test1.getItem();
    int testprice = test1.getPrice();
    Log.i("Class Info Example",testitem+Integer.toString(testprice));
}
}

//custom class.  You could make it public to use on several activities, or just include in the activity if using only here
class myClass{
    private String item;
    private String type;
    private int price;

    public myClass(String itm, String ty, int pr){
        this.item = itm;
        this.price = pr;
        this.type = ty;
    }

    public String getItem() {
        return item;
    }

    public void setItem(String item) {
        this.item = item;
    }

    public String getType() {
        return item;
    }

    public void setType(String type) {
        this.type = type;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

}

আমি একটি পৃথক বর্গ তৈরি ছাড়া পরিবর্তনশীল কোন সংখ্যা সংরক্ষণ করতে নিম্নলিখিত পছন্দ।

final public static Map<String, Map<String, Float>> myMap    = new HashMap<String, Map<String, Float>>();

একটি পরিচয় ব্যবহার করে সম্পন্ন করা যেতে পারে হ্যাশম্যাপ, শর্ত অনুযায়ী যে == অপারেটর দ্বারা কী তুলনা করা হবে এবং সমান হবে না।


এখানে উত্তর:):)

স্ট্রিং কী = "পরিষেবাদি_ সার্ভিকনাম"

ArrayList তথ্য;

জন্য (int i = 0; আমি lssthen data.size (); আমি ++) {

        HashMap<String, String> servicesNameHashmap = new HashMap<String, String>();
        servicesNameHashmap.put(key,data.get(i).getServiceName());
        mServiceNameArray.add(i,servicesNameHashmap);   }

আমি সেরা ফলাফল পেয়েছেন।

আপনি শুধু নতুন হ্যাশম্যাপ মত তৈরি করতে হবে

হ্যাশম্যাপ পরিষেবাদিনাম হ্যাশম্যাপ = নতুন হ্যাশম্যাপ ();

লুপ জন্য আপনার। এটি একই কী এবং একাধিক মানের মত একই প্রভাব থাকবে।

শুভ কোডিং :)


গুয়াভা-গ্রন্থাগার থেকে Multimap এবং তার বাস্তবায়ন - HashMultimap

একটি মানচিত্রের অনুরূপ একটি সংগ্রহ, কিন্তু যা একক কী দিয়ে একাধিক মান সংযুক্ত করতে পারে। যদি আপনি একই কী তবে বিভিন্ন মান সহ দুইবার (কে, ভি) কল রাখেন তবে মাল্টিপ্যাপটিতে মানগুলির উভয় মান থেকে ম্যাপিং রয়েছে।


না, শুধু একটি HashMap হিসাবে। আপনি মূলত মান একটি সংগ্রহ একটি কী থেকে একটি HashMap প্রয়োজন।

আপনি যদি বাইরের লাইব্রেরিগুলি ব্যবহারে খুশি হন তবে HashMultimap এই ধারণাটি HashMultimap যেমন HashMultimap এবং HashMultimap


হ্যা এবং না. সমাধান আপনার মানগুলির জন্য একটি র্যাপার ক্ল্যাস তৈরি করতে হয় যা আপনার কী অনুসারে 2 (3, বা তার বেশি) মান ধারণ করে।



HashMap<Integer,ArrayList<String>> map = new    HashMap<Integer,ArrayList<String>>();

ArrayList<String> list = new ArrayList<String>();
list.add("abc");
list.add("xyz");
map.put(100,list);






java