Java在树映射上迭代-不兼容类型
我有以下收藏:Java在树映射上迭代-不兼容类型,java,iterator,iteration,treemap,Java,Iterator,Iteration,Treemap,我有以下收藏: private Map <String, Staff> staff; 应该将它们返回存储在staffMember变量中,据我所知,这很好??非常感谢你的帮助 Collection <Staff> staffList = staff.values(); Iterator it = staffList.iterator (); while ((isJobAssigned = false) ||it.hasNext())
private Map <String, Staff> staff;
应该将它们返回存储在staffMember变量中,据我所知,这很好??非常感谢你的帮助
Collection <Staff> staffList = staff.values();
Iterator it = staffList.iterator ();
while ((isJobAssigned = false) ||it.hasNext())
{
Staff staffMember = it.next();
if ((staffMember instanceof Typist) && (jobType.equalsIgnoreCase("Typist")))
{
newJob.setJobState ("Assigned");
staffMember.setState("Working");
return newJon.getJobNo() + " Staff allocated: " + staffMember.getName () + ", ID: " + staffMember.getId();
}
Collection statfflist=staff.values();
迭代器it=staffList.Iterator();
而((isJobAssigned=false)| it.hasNext()
{
staffMember=it.next();
if((打字员的staffMember实例)和&(jobType.equalsIgnoreCase(“打字员”))
{
newJob.setJobState(“已分配”);
员工状态(“工作”);
返回newJon.getJobNo()+“分配的员工:”+staffMember.getName()+”,ID:“+staffMember.getId()”;
}
您使用的是原始的迭代器
。您需要将对象
转换为it.next()
返回的人员
,或者使用通用的迭代器
使用原始迭代器:
Staff staffMember = (Staff)it.next();
使用通用迭代器(我建议使用此版本):
Iterator it=staffList.Iterator();
Staff staffMember=it.next();//您可以保留这个
您为什么不使用:
for (Staff st : staff.values()){
// do your stuff
if(st instanceof Typist) break;
}
如果可以指定类型,请不要使用原始迭代器。请确保类型安全。+1谢谢,我实现了您推荐的解决方案,它工作得非常好。我将对泛型进行一些研究,以确保我完全理解。再次感谢。虽然它不能回答问题,但它肯定是一个更好的解决方案。我希望在达到fir时停止迭代与工作类型相匹配的st员工,所以我认为使用while循环会更好?为什么不中断?我编辑了我的答案,其中的一个条件是复制自您的问题,但这里的一般要点是使用中断来退出循环。因为我是一个新手:-)这是一个很好的观点,现在您已经解释过了。我只是坚持硬和快Orth=对整个集合进行迭代,而不是无限迭代。这是一个整洁的技术,当然也会整理这个代码。使用<代码>实例> <代码>是一个代码的气味。考虑有一个工作人员类型的<代码> EnUM <代码>和一个在EnUM上的案例切换。<代码>职员<代码>类可以有一个<代码>抽象
Staff staffMember = (Staff)it.next();
Iterator<Staff> it = staffList.iterator();
Staff staffMember = it.next(); //you can keep this
for (Staff st : staff.values()){
// do your stuff
if(st instanceof Typist) break;
}