gpt4 book ai didi

java - 无法确定 Collectors.groupingBy 的返回类型

转载 作者:行者123 更新时间:2023-11-29 07:24:26 25 4
gpt4 key购买 nike

之前已经回答过类似的问题,但我仍然无法弄清楚我的分组和平均方法有什么问题。

我尝试过多种返回值组合,例如 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;
}

最佳答案

我得到的编译器错误是不同的,关于如何调用 collect 的方法不适用于参数。

您的返回类型 Map<Long, Double>是正确的,但出问题的是你的 ToIntFunction<? super T> .当你使这个方法通用时,你是说调用者可以控制 T ;调用者可以提供类型参数,例如:

yourInstance.<FooBar>findAverageInEpochGroupOrig(answers, Answer::getAnswer_count);

但是,此方法不需要是通用的。只需输入 ToIntFunction<? super Answer>Answer 上操作对于 map 的值。这编译:

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 方法。

关于java - 无法确定 Collectors.groupingBy 的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56959994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com