【发布时间】:2018-02-05 11:26:07
【问题描述】:
这是我在课堂上名为Course的课程模型:
public class Course{
private int courseId;
private String courseName;
private Teacher teacher;
}
这是我在课堂上名为Teacher的老师模型:
public class Teacher{
private int teacherId;
private String name;
}
我想获得Map<String, List<Course>>,但如果teacherId 重复,只需将Course 添加到地图列表中。
我正在使用groupBy
Map<Integer, List<Course>> result = courses.stream()
.collect(Collectors.groupingBy(c -> c.getTeacher().getTeacherId(), Collectors.toList()));
它按预期给出了结果。
但是我想在这里limit,一旦找到5位老师就停止处理并返回结果。
怎么办??
【问题讨论】:
-
现在怎么办?五位还是十位老师? “停止处理”是什么意思?您对不完整的
Course列表感到满意吗? -
可能是一个自定义收集器,其中满足条件后出现的所有元素都只是一个 NOOP
-
我认为您的问题存在混淆。假设您的列表中有 100 门课程。那么如何确定前五位老师的所有课程都已添加到地图中?一旦将第一门课程添加到第五位老师的地图中,您的要求就会停止。您不需要前五位老师的所有课程吗?
-
@ltiGupta:为什么要麻烦自己使用收集器和分组依据?使用简单的 while 循环遍历列表并将教师添加到
Set并且您的 while 循环应该在Set的大小达到 5 或 10 或 ... 后停止 -
@M.Prokhorov 无论流的来源是什么,您始终可以使用循环,因为您可以从流中获取
Iterator
标签: java lambda java-8 java-stream