2016-05-13 6 views
-1

In meiner Methode für Starter stelle ich sicher, dass die beiden ArrayLists die gleiche Größe haben, sonst werfe ich eine Ausnahme. Die Lösung, die ich verwende, um zwei ArrayLists zu iterieren und das Schlüssel-Wert-Paar in eine Map zu setzen, funktioniert gut, aber ich finde es auch nicht sehr elegant oder aktuell.Iterate zwei Arraylists und Schlüssel-Wert, um eleganter Karte

In dieser Methode fülle ich eine Map, die später mit der Apache Freimarker-Bibliothek verwendet wird.

Was ist eine elegantere und effizientere Methode, dies in Java 8 zu tun?

+3

Sie erklären nicht 'String Platzhalter;' und 'String-Wert;' vor dem 'for' Schleife. Mit der Stream-API, keine wirklich elegante Lösung, verwenden Sie einfach einen 'IntStream' über den Indizes und' toMap'-Collector. Weitere Informationen finden Sie im Oracle-Lernprogramm https://docs.oracle.com/javase/tutorial/collections/streams/. – Tunaki

Antwort

3

So etwas könnte den Trick:

List<String> placeHolderList = Arrays.asList("key1", "key2"); 
List<Object> valueList = Arrays.asList("value1", "value2"); 

Map<String, Object> result = IntStream.range(0, placeHolderList.size()) 
    .boxed() 
    .collect(toMap(placeHolderList::get, valueList::get)); 

System.out.println(result); 

Ausgang:

{key1=value1, key2=value2} 
+0

Danke! Ihre und @ HankD Lösung funktioniert sehr gut – DavideS

1

Wie in @NicolasFilotto answer angegeben müssen Sie über die Indizes laufen, aber es gibt keine Notwendigkeit, den Index boxen selbst.

Map<String, Object> result = IntStream.range(0, placeHolderList.size()) 
           .collect(HashMap::new, 
           (map, i) -> map.put(placeHolderList.get(i), valueList.get(i)), 
           Map::putAll); 
0

Wenn Ihr nicht java 8. dann versuchen, diese:

List<String> keyList = Arrays.asList("1", "2"); 
    List<String> valList = Arrays.asList("one", "two"); 

    Map<String, String> map = new HashMap<String, String>(); 

    for (int i = 0; i < keyList.size(); i++) { 
     map.put(keyList.get(i), valList.get(i)); 
    } 
    System.out.println(map);