Java collect函数给出了循环推理错误

时间:2015-10-09 09:11:11

标签: java java-8 java-stream

当输入以下代码时,我得到一个"循环推理" groupingBy函数的参数错误:

Map<String, User> mapByEmail = users.stream().collect(Collectors.groupingBy(User::getEmail));

我发现这令人困惑,因为以下内容不会导致任何问题:

users.stream().collect(Collectors.groupingBy(User::getEmail));

,这也不是:

List<User> listByEmail = users.stream().collect(Collectors.groupingBy(User::getEmail)).values().stream().reduce(null, (a,b)-> a=b);

所以问题是,什么是循环推理,我该如何避免呢?

编辑感谢您的回答。经过进一步的研究,我发现我需要通过以下方式来减少我的结果:

 Map<String, User> mapByEmail = users.stream().collect(Collectors.groupingBy(User::getEmail, Collectors.reducing(new User(),(a,b)-> a=b)));

1 个答案:

答案 0 :(得分:7)

问题是您的结果类型不正确。它应该是Map<String, List<User>>

Map<String, List<User>> mapByEmail = users.stream()
                                          .collect(Collectors.groupingBy(User::getEmail));

错误消息看起来令人困惑,但代码中确实存在错误。