Ich möchte den Typ List<A>
in List<B>
konvertieren. kann ich dies mit Java 8 Stream-Methode tun?Java 8 - Stream Karte Werttyp konvertieren
Ich habe versucht mit diesem Code, kann aber nicht in map() konvertieren.
Ich möchte den Typ List<A>
in List<B>
konvertieren. kann ich dies mit Java 8 Stream-Methode tun?Java 8 - Stream Karte Werttyp konvertieren
Ich habe versucht mit diesem Code, kann aber nicht in map() konvertieren.
Sie AbstractMap.simpleEntry
in der map
Funktion instanziiert können und die Transformation durchzuführen.
z. der folgende Code konvertiert List<Integer>
-List<String>
:
Map<String, List<Integer>> map = new HashMap<>();
Map<String, List<String>> transformedMap = map.entrySet()
.stream()
.map(e -> new AbstractMap.SimpleEntry<String, List<String>>(e.getKey(), e.getValue().stream().map(en -> String.valueOf(en)).collect(Collectors.toList())))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
Wenn ich es richtig verstanden habe, haben Sie eine Map<String, List<A>>
und Sie möchten es in eine Map<String, List<B>>
konvertieren. Sie können, wie etwas tun:
Map<String, List<B>> result = aMap.entrySet().stream()
.collect(Collectors.toMap(
entry -> entry.getKey(), // Preserve key
entry -> entry.getValue().stream() // Take all values
.map(aItem -> mapToBItem(aItem)) // map to B type
.collect(Collectors.toList()) // collect as list
);
Sie es so machen kann:
public class Sandbox {
public static void main(String[] args) {
Map<String, List<A>> aMap = null;
Map<String, List<B>> bMap = aMap.entrySet().stream().collect(toMap(
Map.Entry::getKey,
entry -> entry.getValue().stream()
.map(Sandbox::toB)
.collect(toList())));
}
private static B toB(A a) {
// add your conversion
return null;
}
class B {}
class A {}
}
Sie benötigen ein neues 'Map.Entry' instanziiert. Versuchen Sie 'return new AbstractMap.SimpleEntry <> (entry.getKey(), BList);' – marstran
Syntaxfehler auf Token ">", ungültiger Name bei SimpleEntry <'> 'hier –
Gelöst. Meine Eclipse-Version ist niedriger, um sie zu benutzen. –