为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕码人2483693 2019-03-21 18:15:51
最近做一个项目,大致内容如下:从数据库中检索记录集,放入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 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

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

查看完整回答
反对 回复 2019-04-26
?
ITMISS

TA贡献1871条经验 获得超8个赞

可以使用Map ,key值使用 开始时间+职位名字+部门,然后对Map循环,判断如果结束时间为空,就替换掉


查看完整回答
反对 回复 2019-04-26
?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

用map或者set排重都可以.
我的code
[code="java"]public static void main(String[] args) {
List jobs=new ArrayList();
jobs.add(new JobInfo("2012-1-28", "", "研发一部", "成员"));
jobs.add(new JobInfo("2012-1-28", "2012-9-12", "研发一部", "成员"));
jobs.add(new JobInfo("2011-10-28", "2012-9-12", "工程一部", "经理"));
jobs.add(new JobInfo("2011-10-28", "2012-9-12", "工程一部", "经理"));
new MyTest().filterObj(jobs);
}

public  void filterObj(List<JobInfo> jobs) {
    Map<String, Object> map=new HashMap<String, Object>();
    for (int i = 0; i < jobs.size(); i++) {
        JobInfo jobInfo=jobs.get(i);
        String a=jobInfo.getDeptname();
        String b=jobInfo.getStartdate();
        String c=jobInfo.getJobname();
        String d=jobInfo.getEnddate();
        String key=a+b+c;
        if (map.containsKey(key)) {
            JobInfo ji=(JobInfo) map.get(key);
            if (StringUtils.isBlank(d) && StringUtils.isNotBlank(ji.getEnddate())) {
                map.put(key, jobInfo);
            }
            continue;
        }
        map.put(key, jobInfo);
    }
    for (Object j : map.values().toArray()) {
        jobs.remove(j);
    }

    for (JobInfo j : jobs) {
        System.out.println(j.getJobname()+j.getStartdate()+j.getDeptname()+j.getEnddate());
    }
}


查看完整回答
反对 回复 2019-04-26
  • 3 回答
  • 0 关注
  • 1176 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信