Verwandle eine Liste in eine Map - foreach oder streams?

8

Ich möchte eine List<String> in eine Map<String, Integer> umwandeln. Die Werte der Listen sollten als Schlüssel dienen, und der Kartenwert wird statisch initialisiert.

Ich möchte die Reihenfolge der Liste beibehalten, also LinkedHashMap verwenden und Duplikate ignorieren.

Frage: Hat die java8 stream API einen Vorteil? Weil ich im Folgenden nur die Syntax vergleichen würde, würde ich nie für den ausführlichen Stream api gehen, sondern immer an der alten foreach -Schleife festhalten:

%Vor%

Würden Sie den alten Ansatz beibehalten oder neue Lambda-Ausdrücke verwenden?

    
membersound 06.07.2017, 09:14
quelle

3 Antworten

7

Für diesen einfachen Fall würde I bei der for-Schleife bleiben. Es ist übrigens auch schneller (abgesehen davon, dass es lesbarer ist), Stream s haben Kosten für die Infrastruktur, die verwendet werden muss. Diese neue API ist nur ein Werkzeug und jedes Werkzeug hat Vor- / Nachteile.

Im Allgemeinen verwende ich stream api nur, wenn ich muss - sagen wir, dass List gefiltert oder auf etwas anderes abgebildet werden muss usw. - dann wäre die Stream-Verwendung sinnvoll. Wenn es mehrere Operationen gibt, die durchgeführt werden müssen, würde Code viel lesbarer gemacht, als wenn man dasselbe mit einer Schleife macht; aber das ist nicht immer der Fall - wie in Ihrem Beispiel.

Parallelisierung (falls Sie es wirklich brauchen, ist ein anderer Aspekt). Einfache for-Loops sind nicht einfach zu parallelisieren, aber mit Streams ist dies ein Kinderspiel.

    
Eugene 06.07.2017, 09:23
quelle
3

Es gibt eine Variante der traditionellen for-Schleife, die Sie ebenfalls verwenden können:

%Vor%

Aber es ist nur eine Frage des Stils. Entweder so oder die traditionelle for-Schleife sieht gut aus. Die Verwendung von Streams hingegen ist ausführlicher und weniger lesbar, IMO.

    
quelle
2

Du könntest das for-each mit Stream schreiben. zB.

%Vor%     
matt 06.07.2017 09:37
quelle

Tags und Links