类似的问题之前已经得到回答,但是我仍然无法弄清楚我的分组和平均方法有什么问题。
我尝试了多种返回值组合,例如Map<Long, Double>
,Map<Long, List<Double>
,Map<Long, Map<Long, Double>>
,Map<Long, Map<Long, List<Double>>>
,但这些方法都不能解决IntelliJ向我抛出的错误:'非静态方法不能从静态上下文中引用”。
此刻,我觉得我只是在盲目猜测。那么,谁能给我一些关于如何确定正确的回报类型的见解?谢谢!
方法:
public static <T> Map<Long, Double> findAverageInEpochGroup(List<Answer> values, ToIntFunction<? super T> fn) {
return values.stream()
.collect(Collectors.groupingBy(Answer::getCreation_date, Collectors.averagingInt(fn)));
}
答案课:
@Getter
@Setter
@Builder
public class Answer {
private int view_count;
private int answer_count;
private int score;
private long creation_date;
}
答案 0 :(得分:5)
我收到的编译器错误有所不同,关于对collect
的方法调用不适用于自变量。
您的返回类型Map<Long, Double>
是正确的,但是出问题的是您的ToIntFunction<? super T>
。当使该方法通用时,就是说调用方可以控制T
;调用者可以提供类型参数,例如:
yourInstance.<FooBar>findAverageInEpochGroupOrig(answers, Answer::getAnswer_count);
但是,此方法不需要通用。只需输入ToIntFunction<? super Answer>
就可以在Answer
上操作以获取地图的值。编译:
public static Map<Long, Double> findAverageInEpochGroup(List<Answer> values, ToIntFunction<? super Answer> fn) {
return values.stream()
.collect(Collectors.groupingBy(Answer::getCreation_date, Collectors.averagingInt(fn)));
}
顺便说一句,常规的Java命名约定指定您以驼峰式命名您的变量,例如“ viewCount”而不是“ view_count”。这也会影响任何getter和setter方法。