-
list排除元素,最佳解决方案(欢迎讨论)0
最近做一个项目,大致内容如下:
从数据库中检索记录集,放入List中(list中装的是Job对象)
Job{
startdate 开始时间
enddate 结束时间
deptname 机构名称
jobname 职位名称
}
假如数据如下
第一条:
new Job("2012-1-28", "2012-9-12", "研发一部", "成员") ;
第二条:
new Job("2012-1-28", "", "研发一部", "成员") ;
第三条:
new Job("2011-10-28", "2012-9-12", "工程一部", "经理") ;
三条对象放入list中
现在要根据开始时间、机构名称、职位名称和结束时间来判断,如果某对象“开始时间”、“机构名称”、“职位名称”这三条记录完全一样(如上第一条和第二条)那么就要排除掉结束时间为空的那条(如上第二条)
小弟在做的过程中比较纠结...(实现方法感觉不是很好,同时还发现,用Iterator 循环list的时候,不能通过list对其数据进行“修改”、"删除"操作,)
还望师兄们,指点指点,欢迎讨论!
下面附上我写的代码:
List<OraganUsersInfo> list = query.getOraganHis(userCode) ;
List<OraganUsersInfo> temp = query.getOraganHis(userCode) ;
for(Iterator<OraganUsersInfo> 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 ;2012年9月28日 14:15
3个答案 按时间排序 按投票排序
-
采纳的答案
在数据库里查询里查询的时候,加上排序条件:order by startdate, deptname, jobname, enddate
这样查询出来的结果,开始时间、部门名称和职位名称相同的记录就处在相邻的位置
你只用遍历一遍结果集,记住上一条记录的开始时间、部门名称和职位名称
如果当前记录的这三个值与上一条相同,并且结束时间为空,删掉这条数据就可以了
另,对于这种需要频繁remove操作的,可以考虑LinkedList2012年9月28日 15:13
-
同意“背着家走”的方法,用map或者set排重都可以.
我的codepublic static void main(String[] args) { List<JobInfo> jobs=new ArrayList<JobInfo>(); 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()); } }
2012年10月08日 15:43
相关推荐
本篇文章主要探讨的是在使用STL list时遇到的遍历删除元素过程中常见的错误及其解决方案。 错误用法通常出现在尝试同时遍历和删除list中的元素时。以下是三种常见的错误做法: 1. 错误用法一: 在这个例子中,迭代...
Network List Service 不能启动解决方案 Network List Service 是Windows操作系统中的一个重要组件,负责管理网络连接和网络配置。然而,有时Network List Service可能无法启动,导致网络连接图标上出现小红叉,并...
Linq表达式可以提供一种简洁的解决方案,如下所示: ```csharp list = list.Where(item => !item).ToList(); ``` 这里使用了Linq的Where方法,它创建一个新的List,只包含那些不满足条件(!item)的元素。这种方式...
int[] arr = { 1, 2, 2, 3, 3, 4, 4, 4, 1, 5, 6, 6, 6 }; 两种不同方式(使用map和list两种方式)获得一下输出结果 数组和list 可以使用相同的方法,自己测试可以 控制台输出 ...数组中唯一的元素是:5
list 元素循环比较list 元素循环比较list 元素循环比较list 元素循环比较list 元素循环比较list 元素循环比较
Java 获取 List 中两元素时间差 Java 中获取 List 中两元素时间差是指在 List 集合中计算每个元素之间的时间差异。下面是相关知识点的详细解释: List 数据结构 List 是一种常见的数据结构,在 Java 中有多种实现...
由于`std::list`不是随机访问容器,因此它不支持像数组那样的通过索引直接访问元素(如`[]`运算符)。但是,`std::list`提供了迭代器接口,我们可以利用迭代器来遍历并访问容器中的每个元素。以下是两种遍历`std::...
以上这篇python 寻找list中最大元素对应的索引方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网。 您可能感兴趣的文章:python numpy和list查询其中某个数的个数及定位方法...
卡巴硬件 包括解决方案 产品 list price卡巴硬件 包括解决方案 产品 list price
如下所示: import re word = test s = test abcdas test 1234 testcase testsuite ... 您可能感兴趣的文章:Python 查找list中的某个元素的所有的下标方法python 获取list特定元素下标的实例讲解python
解决方案 注意到报错提示/etc/apt/sources.list 这个文件第60行格式错误,那么尝试把这行注释掉。先打开这个文件: $ sudoedit /etc/apt/sources.list 再使用vim的语法进入编辑模式后,找到第60行的 deb [arch=...
本文将探讨在使用`forEach`循环中遇到无法删除元素的问题,并提供几种解决方案。 首先,了解为什么在`forEach`循环中不能直接修改集合是很重要的。Java集合框架中的`forEach`循环是基于迭代器的`hasNext()`和`next...
- **使用迭代器**的方法可以避免并发修改异常,是一种较为安全的解决方案。 - **使用HashSet特性**的方法最为简洁,但在某些情况下可能会影响元素的顺序。 在实际开发中,可以根据具体需求选择最合适的方法。例如,...
在标准模板库(STL)中,`list`容器是一个双向链表,它提供了高效的插入和删除操作,尤其是在列表的头部或尾部进行操作时,性能尤为突出。...通过掌握上述介绍的方法,可以高效地使用`list`来解决实际问题。
### 百度前端集成解决方案:高效开发的基石 在当今快速发展的互联网时代,前端开发面临着前所未有的挑战与机遇。百度,作为中国领先的互联网企业之一,深知前端技术的重要性,并致力于探索和构建一套高效的前端集成...
用关键字 in 和not in 来 ... 您可能感兴趣的文章:python list是否包含另一个list所有元素的实例Python判断两个list是否是父子集关系的实例python对list中的每个元素进行某种操作的方法Python之list对应元素求和的方法
如 `List Should Contain Sub List ${list} ${sublist}` 确保主列表包含子列表的所有元素。 6. **List Should Not Contain Duplicates**: 判断列表中是否存在重复元素。在去重后,使用此关键字确认列表不含重复元素...
`list to list` 操作通常指的是将一个列表(list)的内容移动到另一个列表中,这可能涉及到列表的复制、合并或者元素的迁移。下面我们将深入探讨这个主题,同时也会关注到`listtolist.js`这个文件,它可能是...
`List<T>`会自动扩容以适应更多的元素,但可以通过设置`Capacity`属性来手动设置容量。当列表的大小超过容量时,会自动进行扩容。同样,如果列表元素减少,容量过大时,也会自动缩小容量。 以上就是C#中`List<T>`的...
此文件搭配本人发表的文章:C#list集合按元素出现次数排序取值(含去重功能),资源完全免费下载,不收取任何费用,纯粹的技术交流。联系方式在文章中有,喜欢的朋友们可以互相交流一下。