Collectors.groupingBy, основанный на вложенном статическом свойстве класса - PullRequest
0 голосов
/ 17 января 2019

У меня есть 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>>>)

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Вы можете попробовать это:

Map<String, List<College>> map = 
         list.stream()
             .collect(groupingBy(college -> college.getDept().getDeptName()));

Обновление:

Эти два наблюдения могут быть не по теме, хотя я думаю, что стоит упомянуть:

  1. Идентифицирован ли идентификатор свойства класса CollegeName заглавно? Я настоятельно рекомендую использовать один и тот же стиль кодирования во всем коде.

  2. Похоже, вам нужно переосмыслить иерархию данных (даже если это просто учебная задача). Соотношение между College и Dept должно быть не one-to-one, а one-to-many.

0 голосов
/ 17 января 2019
College.Dept::getName

является Function<College.Dept, String>. Он не принимает College в качестве ввода.

Используйте лямбду для построения Function<College, String>:

groupingBy(c -> c.getDept().getName())
...