【问题标题】:java 8 lambda toMap showing type cast errorjava 8 lambda toMap显示类型转换错误
【发布时间】:2016-12-30 19:13:12
【问题描述】:

尝试使用 lambda 表达式 java 8 将对象列表收集到 Map 时出现类型转换错误

代码如下:

public static void main(String[] args){
List<Player> players = Arrays.asList(
        new Player("Liz", Gender.FEMALE, 20),
        new Player("Liz", Gender.FEMALE, 22),
        new Player("Bob", Gender.MALE, 20)          
        );

System.out.println(
        players.stream()
                 .collect(toMap(
                         player -> player.getName()+"_"+player.getAge(), 
// above line giving error. 
//The method getAge() is undefined for the type Object
//- The method getName() is undefined for the type Object                                
                         player -> player))
        );

}

一旦我像下面那样将它输入到(播放器),它就可以正常工作。知道为什么编译器要求进行类型转换吗?

player -> ((Player) player).getName()+"_"+((Player) player).getAge()

播放器类如下:

class Player {

private String name;
private Integer age;
private Gender gender;

public Player(String name, Gender gender, Integer age){
    this.name = name;
    this.gender = gender;
    this.age = age;
}
// ...... with corresponding getters and setters    
}

【问题讨论】:

  • 在 JDK 1.8.0_65 上运行良好

标签: lambda java-8 java-stream collectors


【解决方案1】:

这在某些版本中一直存在问题(我想说 1.8.0_45,但我无法确认)。我刚刚在 1.8.0_71 上尝试了你的代码,它对我有用。

最新版本是 1.8.0_111,所以你应该尝试升级到那个。

【讨论】:

  • 感谢您的意见。是的,它在 1.8.0_111 的命令提示符下工作。 eclipse还是报错,需要检查eclipse设置。
猜你喜欢
  • 2018-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-30
  • 2021-07-18
  • 1970-01-01
  • 1970-01-01
  • 2018-08-21
相关资源
最近更新 更多