Java8按字符串分组

Java8按字符串分组,java,java-8,java-stream,grouping,Java,Java 8,Java Stream,Grouping,这是我的密码: public class StudentData { public static List<Student> getData() { return Arrays.asList( new Student(1, "a1", 1, Arrays.asList("cricket", "football", "basketball")), new Student(2, "a2", 1, Arrays.a

这是我的密码:

public class StudentData {

    public static List<Student> getData() {

        return Arrays.asList(
            new Student(1, "a1", 1, Arrays.asList("cricket", "football", "basketball")),
            new Student(2, "a2", 1, Arrays.asList("chess", "football")),
            new Student(3, "a3", 2, Arrays.asList("running")),
            new Student(4, "a4", 2, Arrays.asList("throwball", "football")),
            new Student(5, "a5", 3, Arrays.asList("cricket", "basketball")),
            new Student(6, "a6", 4, Arrays.asList("cricket")), new Student(7, "a7", 5, Arrays.asList("basketball")),
            new Student(8, "a8", 6, Arrays.asList("football")),
            new Student(9, "a9", 8, Arrays.asList("tennis", "swimming")),
            new Student(10, "a10", 8, Arrays.asList("boxing", "running")),
            new Student(11, "a11", 9, Arrays.asList("cricket", "football")),
            new Student(12, "a12", 11, Arrays.asList("tennis", "shuttle")),
            new Student(13, "a13", 12, Arrays.asList("swimming"))
        );
    }

}
公共班级学生数据{
公共静态列表getData(){
返回数组.asList(
新生(1,“a1”,1,数组。asList(“板球”、“足球”、“篮球”),
新学生(2,“a2”,1,数组.asList(“国际象棋”,“足球”),
新生(3,“a3”,2,数组。asList(“正在运行”),
新生(4,“a4”,2,数组。asList(“投球”,“足球”),
新生(5名,a5名,3名,阵列。asList(“板球”、“篮球”),
新生(6,“a6”,4,阵列。asList(“板球”)),新生(7,“a7”,5,阵列。asList(“篮球”),
新生(8,“a8”,6,阵列。asList(“足球”),
新生(9名,“a9”,8名,“网球”,“游泳”),
新生(10,“a10”,8,数组。asList(“拳击”,“跑步”),
新学生(11,“a11”,9,阵列。asList(“板球”,“足球”),
新学生(12,“a12”,11,阵列。asList(“网球”,“穿梭”)),
新生(13,“a13”,12,数组。asList(“游泳”))
);
}
}
如何根据爱好对学生进行分组。我尝试了以下代码:

List<Student> data = StudentData.getData();
data.stream().collect(Collectors.groupingBy(s -> s.getHobbies().stream()));
List data=StudentData.getData();
data.stream().collect(Collectors.groupingBy(s->s.gethabiods().stream());

它没有给出正确的答案。

你基本上需要一个由一对
组成的
流(我选择
AbstractMap.SimpleEntry
),它的左半部作为爱好,右半部作为学生(可能是另一种方式,没关系)

稍后,只需根据
嗜好将其分组(在您的案例中,这是一个字符串)


板球:学生1,学生5,学生6 obj.像这样谢谢@Eugene。。我只是重新编写代码。Map collect5=data.stream().flatMap(x->x.getcabiods().stream().Map(y->newsimpleentry(y,x)).collect(collector.groupingBy(Entry::getKey,Collectors.mapping(Entry::getValue,Collectors.toList());
data.stream()
    .flatMap(student -> student.getHobbies().stream().map(hobby -> new SimpleEntry<>(hobby, student)))
    .collect(Collectors.groupingBy(
            Entry::getKey,
            Collectors.mapping(Entry::getValue, Collectors.toList())
));
Collectors.groupingBy(entry -> entry.getKey())