كيفية تحويل الخريطة إلى قائمة في جافا؟
-
06-07-2019 - |
سؤال
ما هي أفضل طريقة لتحويل أ Map<key,value>
إلى أ List<value>
؟ما عليك سوى التكرار على جميع القيم وإدراجها في القائمة أم أنني أتجاهل شيئًا ما؟
المحلول
List<Value> list = new ArrayList<Value>(map.values());
وعلى افتراض:
Map<Key,Value> map;
نصائح أخرى
القضية هنا هي أن Map
له قيمتان (مفتاح وقيمة)، بينما a List
له قيمة واحدة فقط (عنصر).
ولذلك، فإن أفضل ما يمكن القيام به هو إما الحصول على List
من المفاتيح أو القيم.(ما لم نقم بإنشاء غلاف للاحتفاظ بزوج المفتاح/القيمة).
قل لدينا أ Map
:
Map<String, String> m = new HashMap<String, String>();
m.put("Hello", "World");
m.put("Apple", "3.14");
m.put("Another", "Element");
المفاتيح ك List
يمكن الحصول عليها عن طريق إنشاء جديد ArrayList
من Set
عاد بواسطة Map.keySet
طريقة:
List<String> list = new ArrayList<String>(m.keySet());
في حين أن القيم ك List
يمكن الحصول عليها إنشاء جديد ArrayList
من Collection
عاد بواسطة Map.values
طريقة:
List<String> list = new ArrayList<String>(m.values());
نتيجة الحصول على List
من المفاتيح:
Apple Another Hello
نتيجة الحصول على List
من القيم:
3.14 Element World
واستخدام API جافا 8 تيارات.
List<Value> values = map.values().stream().collect(Collectors.toList());
وmap.entrySet()
يمنحك مجموعة من الكائنات Map.Entry
تحتوي على كل مفتاح وقيمة. يمكنك ثم تحويل هذا إلى أي كائن مجموعة تريد، مثل new ArrayList(map.entrySet())
؛
قائمة ماذا ؟
على افتراض map
هو المثال الخاص بك من Map
map.values()
سيعود أCollection
يحتوي على كافة قيم الخريطة.map.keySet()
سيعود أSet
تحتوي على كافة مفاتيح الخريطة.
واعتقد انك تريد تحويل القيم الواردة في Map
إلى list
؟ الأسهل هو استدعاء الأسلوب values()
واجهة Map
. هذا سيعود Collection
من الأشياء القيمة الموجودة في Map
.
لاحظ أن هذا Collection
المدعوم من قبل الكائن Map
وسوف أية تغييرات على الكائن Map
تعكس هنا. حتى إذا كنت تريد نسخة منفصلة لا بد أن الكائن Map
الخاص بك، ببساطة إنشاء كائن جديد List
مثل ArrayList
تمرير Collection
القيمة على النحو التالي.
ArrayList<String> list = new ArrayList<String>(map.values());
ويمكنك القيام بذلك مثل هذا
List<Value> list = new ArrayList<Value>(map.values());
إذا كنت تريد التأكد من القيم في List<Value>
الناتجة هي في يأمر الرئيسي للMap<Key, Value>
المدخلات، وتحتاج إلى "المرور عبر" SortedMap
بطريقة أو بأخرى.
وإما <م> بدء م> مع تنفيذ SortedMap
ملموسة (مثل TreeMap
) أو إدراج Map
الإدخال إلى SortedMap
قبل تحويل ذلك إلى List
. منها مثلا:
Map<Key,Value> map;
List<Value> list = new ArrayList<Value>( new TreeMap<Key Value>( map ));
وإلا ستحصل على كل ما أصلي طلب تقدم تنفيذ Map
، التي غالبا ما تكون شيئا آخر غير طلب رئيسي الطبيعي (حاول Hashtable
أو ConcurrentHashMap
، لمجموعة متنوعة).
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("java", 20);
map.put("C++", 45);
Set <Entry<String, Integer>> set = map.entrySet();
List<Entry<String, Integer>> list = new ArrayList<Entry<String, Integer>>(set);
ونحن يمكن أن يكون كل زوج من المفاتيح وقيمة في list.Also يمكن الحصول على المفتاح والقيمة باستخدام Map.Entry بواسطة بالتكرار عبر القائمة.
// you can use this
List<Value> list = new ArrayList<Value>(map.values());
// or you may use
List<Value> list = new ArrayList<Value>();
for (Map.Entry<String, String> entry : map.entrySet())
{
list.add(entry.getValue());
}
"Map<String , String > map = new HapshMap<String , String>;
map.add("one","java");
map.add("two" ,"spring");
Set<Entry<String,String>> set = map.entrySet();
List<Entry<String , String>> list = new ArrayList<Entry<String , String>> (set);
for(Entry<String , String> entry : list ) {
System.out.println(entry.getKey());
System.out.println(entry.getValue());
} "
إليك طريقة عامة للحصول على القيم من الخارطة.
public static <T> List<T> ValueListFromMap(HashMap<String, T> map) {
List<T> thingList = new ArrayList<>();
for (Map.Entry<String, T> entry : map.entrySet()) {
thingList.add(entry.getValue());
}
return thingList;
}
HashMap<Integer, List<String>> map = new HashMap<>();
List<String> list = new ArrayList<String>();
list.add("Java");
list.add("Primefaces");
list.add("JSF");
map.put(1,list);
if(map != null){
return new ArrayList<String>((Collection<? extends String>) map.values());
}