Java8: Comment filtrer une carte de valeur de liste via stream
Je suis toujours un débutant de Java 8. Je suis coincé sur le filtrage d'une carte de valeurs de liste. Voici mon code
public class MapFilterList {
private static Map<String, List<Person>> personMap = new HashMap<>();
public static void main(String[] args) {
Person p1 = new Person("John", 22);
Person p2 = new Person("Smith", 45);
Person p3 = new Person("Sarah", 27);
List<Person> group1 = new ArrayList<>();
group1.add(p1);
group1.add(p2);
List<Person> group2 = new ArrayList<>();
group2.add(p2);
group2.add(p3);
List<Person> group3 = new ArrayList<>();
group3.add(p3);
group3.add(p1);
personMap.put("group1", group1);
personMap.put("group2", group2);
personMap.put("group3", group3);
doFilter("group1").forEach(person -> {
System.out.println(person.getName() + " -- " + person.getAge());
});
}
public static List<Person> doFilter(String groupName) {
return personMap.entrySet().stream().filter(key -> key.equals(groupName)).map(map -> map.getValue()).collect(Collectors.toList());
}
}
Comment puis-je corriger la méthode doFilter
car l'erreur me montre cannot convert from List<List<Person>> to List<Person>
.
4
Author: Stefan Zobel, 2017-02-20
1 answers
Si j'ai bien compris, vous avez besoin du code suivant:
public static List<Person> doFilter(String groupName) {
return personMap.entrySet().stream()
.filter(entry -> entry.getKey().equals(groupName))
.map(entry -> entry.getValue())
.flatMap(List::stream)
// as an option to replace the previous two
// .flatMap(entry -> entry.getValue().stream())
.collect(Collectors.toList());
}
8
Author: Zefick, 2017-02-20 06:14:10