将hashmap列表转换为set

dhy*_*ngh -4 java generics collections hashmap set

我想List<HashMap<String, Object>>投入Set<StudentInfo>

我有方法

public List<HashMap<String,Object>> getStudentData(studentId);
Run Code Online (Sandbox Code Playgroud)

我想将结果转换为Set,所以我用过

Set<StudentInfo> studentFilteredInfo = new HashSet<>();
List<Map<String, Object>> studentCompleteRecord = getStudentData(1005);
studentFilteredInfo.addAll((Collection<? extends StudentInfo>studentCompleteRecord ));
Run Code Online (Sandbox Code Playgroud)

最初当我在localhost上使用java 8,eclipse和tomcat 8执行它时工作正常.

当我试图用maven构建它时

mvn clean package
Run Code Online (Sandbox Code Playgroud)

它将通过一个错误:

不兼容的类型: java.util.List<java.util.Map<java.lang.String,java.lang.Object>>

cannot be converted to java.util.Collection<? extends com.school.model.StudentInfo>
Run Code Online (Sandbox Code Playgroud)

Gho*_*ica 9

你是错误的:没有铸造List<Map<String, Object>>进一些Set<Whatever>!

转换基本上意味着:你知道某些"对象"具有更具体的类型; 因此,你告诉编译器:"你可以放心地认为这里的东西是现实中的其他东西".

但这意味着:实际上(在运行时),"东西"真的是"别的东西"!单独你在问题中提供的泛型类型非常清楚:你不能在这里进行演员表演!

换句话说:你必须编写的代码迭代您的地图列表; 提取创建新StudentInfo对象所需的信息.然后你收集那些新创建的对象; 并将它们放入一个新的集合; 然后你可以从你的方法返回!

最后:始终避免"具体"实现类型; 你用过List<HashMap<...- 相反,你应该去List<Map<...!