我有一个College
类,带有嵌套的静态类Dept
大学
class College {
private String collegeName;
private Dept dept;
public Dept getDept() {
return dept;
}
public void setDept(Dept dept) {
this.dept = dept;
}
public String getCollegeName() {
return CollegeName;
}
public void setCollegeName(String collegeName) {
CollegeName = collegeName;
}
public static class Dept {
private String deptName;
public String getDeptName() {
return deptName;
}
public void setDeptName(String deptName) {
this.deptName = deptName;
}
}
}
我有list
个对象中的College
个,并试图基于groupingBy
来deptName i,e (Map<String>, List<College>)
,但是到目前为止还没有运气,它给出了编译错误消息
List<College> list = new ArrayList<College>();
list.stream().collect(Collectors.groupingBy(College.Dept::getDeptName));
编译错误
The method collect(Collector<? super College,A,R>) in the type Stream<College> is not applicable for the arguments (Collector<College.Dept,capture#1-of ?,Map<String,List<College.Dept>>>)
答案 0 :(得分:4)
College.Dept::getName
是Function<College.Dept, String>
。它不接受College
作为输入。
使用lambda构造Function<College, String>
:
groupingBy(c -> c.getDept().getName())
答案 1 :(得分:2)
您可以尝试以下方法:
Map<String, List<College>> map =
list.stream()
.collect(groupingBy(college -> college.getDept().getDeptName()));
更新:
尽管我认为这两个观察点值得一提,但这两个观察点可能不合时宜
类别属性CollegeName
的标识符是否故意大写?我强烈建议您在所有代码中使用相同的编码样式。
看起来您需要重新考虑数据层次结构(即使这只是教程任务)。 College
和Dept
之间的关系不应为one-to-one
,而应为one-to-many
。