java 8 lambda toMap显示类型转换错误

java 8 lambda toMap显示类型转换错误,lambda,java-8,java-stream,collectors,Lambda,Java 8,Java Stream,Collectors,我在尝试使用lambda表达式java 8收集要映射的对象列表时遇到类型转换错误 代码如下: 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", G

我在尝试使用lambda表达式java 8收集要映射的对象列表时遇到类型转换错误

代码如下:

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))
        );

}
玩家等级如下:

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    
}

这在某些版本中是一个问题(我想说1.8.0_45,但我不能确认)。我刚刚在1.8.0_71上试用了你的代码,它对我很有用


最新版本是1.8.0_111,因此您应该尝试升级到该版本。

在JDK 1.8.0@上运行良好感谢您的输入。是的,它在1.8.0_111的命令提示符下工作。eclipse仍然显示错误,需要检查eclipse设置。
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    
}