我有interface Course
和class CourseCLS implements Course
。
首先,我尝试使用相同的数字对CourseCLS
个对象进行分组。我不确定它是否正确。
Map<Integer, List<CourseCLS>> first =
courses.values().stream()
.collect(Collectors.groupingBy(c -> c.getNumber()));
现在我需要将Map<Integer, List<CourseCLS>>
更改为Map<Integer, List<Course>>
,然后将其返回。
任何想法怎么做?
groupingBy(c -> c.overHeadPercentage(),
Collectors.mapping(p -> (Course) p, Collectors.toList()))
答案 0 :(得分:6)
您正在尝试解决不存在的问题。只需写下
Map<Integer, List<Course>> first =
courses.values().stream()
.collect(Collectors.groupingBy(c -> c.getNumber()));
由于Stream元素是实现CourseCLS
的{{1}}的实例,因此您可以将它们收集到Course
中,而无需任何其他操作。
如果List<Course>
接口没有Course
方法,但只有具体的getNumber
类,可能会出现唯一可能出现的问题,因为上面的收集器正在收集{{ 1}}实例。但即使这样也可以在没有任何映射步骤的情况下解决:
CourseCLS
由于Course
允许下游收集器收集比自身收集的更广泛的类型,因此您可以将Map<Integer, List<Course>> first =
courses.values().stream()
.collect(Collectors.groupingBy(c -> c.getNumber(), Collectors.toList()));
收集器收集groupingBy
实例与收集toList()
收集器的Course
收集器合并{1}}个实例。 groupingBy
的类型推断检测到此构造的有效性。
答案 1 :(得分:1)
由于CourseCLS实现课程,您只需创建一个以课程为值的新地图,它将接受课程界面的任何实例,因此将接受CourseCLS。 因此,请查看您的第一张地图,并将每个K,V对添加到结果地图