استرداد مفتاح arrayListMultImap
-
20-09-2019 - |
سؤال
أنا أستخدم الجوافة ArrayListMultimap<K,V>
جمع الخريطة Integers
ل Strings
. يوفر الفصل طريقة تسمى containsValue(Object value)
الذي يتحقق مما إذا كان Multimap يحتوي على القيمة المحددة لأي مفتاح. بمجرد أن أقرر أن هذا صحيح ، ما هي أفضل طريقة لاسترداد المفتاح المذكور؟
ArrayListMultimap<String, Integer> myMap = ArrayListMultimap.create();
if (myMap.containsValue(new Integer(1))
{
// retrieve the key?
}
المحلول
بدلا من استخدام containsValue
يمكنك التكرار mymap.entries () الذي يعيد مجموعة من جميع أزواج القيمة الرئيسية. يعبر التكرار الذي تم إنشاؤه بواسطة المجموعة التي تم إرجاعها القيم لمفتاح واحد ، تليها قيم المفتاح الثاني ، وما إلى ذلك:
Integer toFind = new Integer(1);
for (Map.Entry<String, Integer> entry: myMap.entries()) {
if (toFind.equals(entry.getValue())) {
// entry.getKey() is the first match
}
}
// handle not found case
إذا نظرت إلى تنفيذ containsValue
إنه يتكرر فقط على قيم الخريطة ، لذا فإن أداء القيام بذلك map.entries()
بدلاً من map.values()
يجب أن يكون نفس الشيء.
public boolean containsValue(@Nullable Object value) {
for (Collection<V> collection : map.values()) {
if (collection.contains(value)) {
return true;
}
}
return false;
}
في الحالة العامة بالطبع ، لا يوجد بالضرورة مفتاحًا فريدًا لقيمة معينة ، لذا ما لم تكن تعلم أنه في خريطتك ، تحدث كل قيمة فقط مقابل مفتاح واحد ، ستحتاج إلى تحديد السلوك على سبيل المثال إذا كنت تريد المفتاح الأول أو الأخير مفتاح.