i_willh 2012-09-28 14:15 采纳率: 0%
浏览 688
已采纳

list排除元素,最佳解决方案(欢迎讨论)

最近做一个项目,大致内容如下:
从数据库中检索记录集,放入List中(list中装的是Job对象)
Job{
startdate 开始时间
enddate 结束时间
deptname 机构名称
jobname 职位名称
}
假如数据如下
[color=red]第一条:[/color]
new Job("2012-1-28", "2012-9-12", "研发一部", "成员") ;

[color=red]第二条:[/color]
new Job("2012-1-28", "", "研发一部", "成员") ;
[color=red]第三条:[/color]
new Job("2011-10-28", "2012-9-12", "工程一部", "经理") ;
三条对象放入list中
现在要根据开始时间、机构名称、职位名称和结束时间来判断,如果某对象“开始时间”、“机构名称”、“职位名称”这三条记录完全一样(如上第一条和第二条)那么就要排除掉结束时间为空的那条(如上第二条)

小弟在做的过程中比较纠结...(实现方法感觉不是很好,同时还发现,用Iterator 循环list的时候,不能通过list对其数据进行“修改”、"删除"操作,)
还望师兄们,指点指点,欢迎讨论!

下面附上我写的代码:

List list = query.getOraganHis(userCode) ;
List temp = query.getOraganHis(userCode) ;
for(Iterator iter = list.iterator(); iter.hasNext();) {
OraganUsersInfo info = iter.next() ;
JaDate startdate = info.getJoindate() ;
String oragan = info.getOragancode() ;
String job = info.getJobcode() ;
JaDate enddate = info.getEnddate() ;

        if(enddate != null) {
            for(Iterator<OraganUsersInfo> iterator = temp.iterator(); iterator.hasNext();) {
                OraganUsersInfo tempInfo = iterator.next() ;
                if(startdate.equals(tempInfo.getJoindate()) && oragan.equals(tempInfo.getOragancode()) && job.equals(tempInfo.getJobcode()) && tempInfo.getEnddate() == null) {
                    iterator.remove();
                }
            }
        }
    }
    return temp ;
  • 写回答

3条回答 默认 最新

  • chenchi2038 2012-09-28 15:13
    关注

    在数据库里查询里查询的时候,加上排序条件:order by startdate, deptname, jobname, enddate
    这样查询出来的结果,开始时间、部门名称和职位名称相同的记录就处在相邻的位置
    你只用遍历一遍结果集,记住上一条记录的开始时间、部门名称和职位名称
    如果当前记录的这三个值与上一条相同,并且结束时间为空,删掉这条数据就可以了
    另,对于这种需要频繁remove操作的,可以考虑LinkedList

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?