我有一个包含字符串集合的对象,比方说一个人说的语言.
public class Person {
private String name;
private int age;
private List<String> languagesSpoken;
// ...
}
Run Code Online (Sandbox Code Playgroud)
现在,创建像这样的一些实例......
Person p1 = new Person("Bob", 21, Arrays.asList("English", "French", "German"));
Person p2 = new Person("Alice", 33, Arrays.asList("English", "Chinese", "Spanish"));
Person p3 = new Person("Joe", 43, Arrays.asList("English", "Dutch", "Spanish", "German"));
//put them in list
List<Person> people = Arrays.asList(p1,p2,p3);
Run Code Online (Sandbox Code Playgroud)
...我想要的是Map<String, List<Person>>,对于每种语言列出说这种语言的人:
["English" -> [p1, p2, p3],
"German" -> [p1, p3],
etc. ]
Run Code Online (Sandbox Code Playgroud)
当然,这可以通过命令式方式轻松编程,但如何使用Java Streams实现功能?我尝试了类似的东西people.stream.collect(groupingBy(Person::getLanguagesSpoken))但当然给了我一个Map<List<String>, List<Person>>.我能找到的所有例子都groupingBy在Primitives或Strings上使用.