首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java groupingBy列表

Java groupingBy列表
EN

Stack Overflow用户
提问于 2018-07-14 02:45:59
回答 2查看 89关注 0票数 0
代码语言:javascript
复制
class Student {
    List<Integer> grades
}

我希望按成绩对学生进行分组,但如果每个学生只有一个成绩,groupingBy就可以工作。有没有别的lamba方法可以做到这一点?我期望像Map<Integer, List<Student>>那样的结果

EN

回答 2

Stack Overflow用户

发布于 2018-07-14 03:12:53

如果您提供帮助,groupingBy将完成这项工作:您可能会在groupingBy的Javadoc中找到与此等效的版本。

代码语言:javascript
复制
final List<Student> students = ...;
// @formatter:off
students.stream()
        .flatMap(student -> student.grades.stream()
                                          .map(grade -> new StudentGrade(student, grade)))
        .collect(groupingBy(StudentGrade::getGrade, mapping(StudentGrade::getStudent, toList())));
// @formatter:on

现在,你得到了一个Map<Integer, List<Student>>。由您决定是否过滤重复项。

您将需要这些导入:

代码语言:javascript
复制
import static java.util.stream.Collectors.groupingBy;
import static java.util.stream.Collectors.mapping;
import static java.util.stream.Collectors.toList;

StudentGrade类很简单:

代码语言:javascript
复制
class StudentGrade {
  private final Student student;
  private final Integer   grade;
  public StudentGrade(Student student, Integer grade) {
    this.student = student;
    this.grade = grade;
  }
  public Student getStudent() {return student;}
  public Integer getGrade()   {return grade;}
}
票数 0
EN

Stack Overflow用户

发布于 2018-07-14 03:26:21

代码语言:javascript
复制
 Map<Integer, List<Student>> collect = students.stream()
                                                  .flatMap(student -> student.grades.stream()
                                                                                    .map(grade -> new AbstractMap.SimpleEntry<>(grade,
                                                                                            student)))
                                                  .collect(Collectors.groupingBy(entry -> entry.getKey(),
                                                          Collectors.mapping(Entry::getValue, Collectors.toList())));

因为Java没有对元组实现,所以我使用了AbstractMap.SimpleEntry

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51331186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档