Элементами вашего stream
конвейера являются RunPlay
экземпляры.Поэтому, когда вы вызываете RunPlay::getYardline
, соответствующий метод вызывается для переданного в объекте, который в вашем случае является экземпляром RunPlay
.Но как вы можете вызвать PassPlay::getPoints
, что невозможно в этом контексте, используя ссылку на метод.Поэтому, если вам нужно сделать это, вы должны использовать лямбда-выражение, например, предполагая, что метод является методом экземпляра,
Map<Integer, Map<Integer, Double>> map = plays.stream()
.collect(Collectors.groupingBy(RunPlay::getYardline, Collectors.groupingBy(RunPlay::getDown,
Collectors.averagingDouble(ignored -> new PassPlay().getPoints()))));
Однако вы можете использовать ту же ссылку на метод, которую вы использовали выше в этом контексте, чтодопустимо.
Function<PassPlay, Double> toDoubleFn = PassPlay::getPoints;
Таким образом, метод getPoints
будет вызван в переданном экземпляре.