2017-06-14 3 views
2

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.

+2

Sie benötigen ein neues 'Map.Entry' instanziiert. Versuchen Sie 'return new AbstractMap.SimpleEntry <> (entry.getKey(), BList);' – marstran

+0

Syntaxfehler auf Token ">", ungültiger Name bei SimpleEntry <'> 'hier –

+0

Gelöst. Meine Eclipse-Version ist niedriger, um sie zu benutzen. –

Antwort

2

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)); 
4

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 
     ); 
1

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 {} 
}