【发布时间】: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