2017-08-18 1 views
1

So habe ich diese Klasse:Map <String, Set <T>> zur Liste in Java 8

class User { 
    public String name; 
    public Integer age; 

    public User(String name, Integer age) { 
     this.name = name; 
     this.age = age; 
    } 
} 

Und dann diese Map:

Map<String, Set<Integer>> map = new HashMap<>(); 
map.put("User", Set.of(18, 19, 20, 21)); 

Ich möchte hier eine Liste von 4 Benutzern erhalten :

  1. Name: "John", Alter: 18
  2. Name: "John", ein ge: 19
  3. ....
  4. ....

Alle Ideen, wie kann ich es mit streams in Java 8 tun?

+0

sollte nicht die Frage nur mit 'java-Stream' anstatt' java-9' markiert werden? – nullpointer

+2

Mögliches Duplikat von [Java 8 stream für Map >] (https://stackoverflow.com/questions/40640114/java-8-stream-for-map-string-settring) Nicht verallgemeinernd, aber es scheint so Die Antwort hier hätte das Gleiche sowieso gelöst. – nullpointer

Antwort

3
List<User> users = map.entrySet() 
    .stream() 
    .flatMap(e -> e.getValue().stream().map(x -> new User(e.getKey(), x))) 
    .collect(Collectors.toList()); 

Set.of ist java-9 btw

+1

Mögliches Duplikat von [Java 8-Stream für Map >] (https://stackoverflow.com/questions/40640114/java-8-stream-for-map-string-settring)? Ich verallgemeinere es nicht, aber es scheint, als ob die Antwort hier dasselbe gelöst hätte. – nullpointer

Verwandte Themen