小编Zof*_*off的帖子

Java 8流收集集

我有两张地图,即

Map<String, Set<String>> courseTeacherMap = {course1: [teacher1, teacher2], ...}
Map<String, Set<String>> teacherStudentMap = {teacher1: [student1, student2], ...}
Run Code Online (Sandbox Code Playgroud)

我定义了courseStudentPair一个结构非常简单的类

public class courseStudentPair{
    String studentName; // Taken from teacherStudentMap
    String courseName; // Taken from courseTeacherMap
}
Run Code Online (Sandbox Code Playgroud)

我的目标是Set<courseStudentPair>从两张地图中获取一张.只要教师A正在教授课程C,每个在A键值中设置的teacherStudentMap学生都被认为是学习C的学生.

例如,给定

Map<String, Set<String>> courseTeacherMap = {c1: [t1], c2:[t2], c3:[t1, t2]}
Map<String, Set<String>> teacherStudentMap = {t1: [s1], t2:[s1, s2]}
Run Code Online (Sandbox Code Playgroud)

结果应该是*(student,course)表示下面示例中的courseStudentPair对象*

Set<courseStudentPair> result = [(c1, s1), (c2, s1), (c2, s2), (c3, s1), (c3, s2)]
Run Code Online (Sandbox Code Playgroud)

使用for循环来完成它非常简单,但我正在学习Java 8中的流函数,这对我来说似乎很复杂.您可以假设courseStudentPair该类已定义构造函数或构建器.

java-8 java-stream

5
推荐指数
1
解决办法
1671
查看次数

Java将列表转换为集合映射

假设我有一个名为Student的对象列表.对象学生的定义是这样的

public Class Student {
    private String studentName;
    private String courseTaking;
}
Run Code Online (Sandbox Code Playgroud)

在学生列表中,可以有多个学生对象具有相同的studentName但不同的courseTaking.现在我想将学生列表转换为studentName和courseTaking的地图

Map<String, Set<String>>
Run Code Online (Sandbox Code Playgroud)

关键是studentName,并且该值是同一个学生作为一组放在一起的所有课程.我怎么能用stream()和collect()做到这一点?

java lambda java-8 java-stream

2
推荐指数
1
解决办法
1934
查看次数

如何将Map <v1,Set <v2 >>反转为Java中的Map <v2,Set <v1 >> with stream()

我有一个Map对象Map<t1, Set<t2>>,我想进入集合并将t2集合转换为新地图的键.原始键t1将是地图的新值.
例如,给定一个包含两个条目的地图

{key1: [a, b, c], key2: [c, d]}
Run Code Online (Sandbox Code Playgroud)

得到的地图将是

{a: [key1], b: [key1], c: [key1, key2], d: [key2]}
Run Code Online (Sandbox Code Playgroud)

[]表示在上面的例子中设置.

java java-8 java-stream

2
推荐指数
1
解决办法
288
查看次数

标签 统计

java-8 ×3

java-stream ×3

java ×2

lambda ×1