2015-05-26 17 views
28

Um die neue Stream-API besser zu verstehen, versuche ich, alten Code zu konvertieren, aber ich stecke auf diesem fest.Java 8 Stream Collecting Set

public Collection<? extends File> asDestSet() { 
    HashMap<IFileSourceInfo, Set<File>> map = new HashMap<IFileSourceInfo, Set<File>>(); 
    //... 
    Set<File> result = new HashSet<File>(); 
    for (Set<File> v : map.values()) { 
     result.addAll(v); 
    } 
    return result; 
} 

Ich kann keine gültige Collector für sie zu schaffen scheinen:

public Collection<? extends File> asDestSet() { 
    HashMap<IFileSourceInfo, Set<File>> map = new HashMap<IFileSourceInfo, Set<File>>(); 
    //... 
    return map.values().stream().collect(/* what? */); 
} 
+5

'return map.values ​​(). Stream(). FlatMap (Set :: stream) .collect (Collectors.toSet());' oder '.collect (toCollection (HashSet :: new));' wie dort ist keine Garantie hinter der gesetzten Implementierung von 'toSet()'. –

+2

oder '.collect (HashSet :: neu, Set :: addAll, Set :: addAll)' – Misha

Antwort

65

Verwendung flatMap:

return map.values().stream().flatMap(Set::stream).collect(Collectors.toSet()); 

Die flatMap flacht alle Ihre Sätze in einzelnen Strom.