0 0

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个答案 按时间排序 按投票排序

0 0

采纳的答案

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

2012年9月28日 15:13
0 0

同意“背着家走”的方法,用map或者set排重都可以.
我的code

public 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
0 0

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

2012年9月28日 14:50

相关推荐

    C++ STL list 遍历删除出错解决方案

    本篇文章主要探讨的是在使用STL list时遇到的遍历删除元素过程中常见的错误及其解决方案。 错误用法通常出现在尝试同时遍历和删除list中的元素时。以下是三种常见的错误做法: 1. 错误用法一: 在这个例子中,迭代...

    Network List Service不能启动解决方案

    Network List Service 不能启动解决方案 Network List Service 是Windows操作系统中的一个重要组件,负责管理网络连接和网络配置。然而,有时Network List Service可能无法启动,导致网络连接图标上出现小红叉,并...

    C#遍历List并删除某个元素的方法

    Linq表达式可以提供一种简洁的解决方案,如下所示: ```csharp list = list.Where(item =&gt; !item).ToList(); ``` 这里使用了Linq的Where方法,它创建一个新的List,只包含那些不满足条件(!item)的元素。这种方式...

    数组,List 重复元素统计数量,找出唯一的元素

    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 元素循环比较list 元素循环比较

    java获取list中两元素时间差

    Java 获取 List 中两元素时间差 Java 中获取 List 中两元素时间差是指在 List 集合中计算每个元素之间的时间差异。下面是相关知识点的详细解释: List 数据结构 List 是一种常见的数据结构,在 Java 中有多种实现...

    std::List类的遍历获得元素的操作二法

    由于`std::list`不是随机访问容器,因此它不支持像数组那样的通过索引直接访问元素(如`[]`运算符)。但是,`std::list`提供了迭代器接口,我们可以利用迭代器来遍历并访问容器中的每个元素。以下是两种遍历`std::...

    python 寻找list中最大元素对应的索引方法

    以上这篇python 寻找list中最大元素对应的索引方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网。 您可能感兴趣的文章:python numpy和list查询其中某个数的个数及定位方法...

    卡巴硬件 包括解决方案 产品 list price

    卡巴硬件 包括解决方案 产品 list price卡巴硬件 包括解决方案 产品 list price

    使用python list 查找所有匹配元素的位置实例

    如下所示: import re word = test s = test abcdas test 1234 testcase testsuite ... 您可能感兴趣的文章:Python 查找list中的某个元素的所有的下标方法python 获取list特定元素下标的实例讲解python

    阿里云镜像安装docker报错的问题及解决方案

    解决方案 注意到报错提示/etc/apt/sources.list 这个文件第60行格式错误,那么尝试把这行注释掉。先打开这个文件: $ sudoedit /etc/apt/sources.list 再使用vim的语法进入编辑模式后,找到第60行的 deb [arch=...

    forEach中为什么不能删除元素解决方案.pdf

    本文将探讨在使用`forEach`循环中遇到无法删除元素的问题,并提供几种解决方案。 首先,了解为什么在`forEach`循环中不能直接修改集合是很重要的。Java集合框架中的`forEach`循环是基于迭代器的`hasNext()`和`next...

    在list集合中输入元素,去除重复的元素并输出

    - **使用迭代器**的方法可以避免并发修改异常,是一种较为安全的解决方案。 - **使用HashSet特性**的方法最为简洁,但在某些情况下可能会影响元素的顺序。 在实际开发中,可以根据具体需求选择最合适的方法。例如,...

    STL中list的使用

    在标准模板库(STL)中,`list`容器是一个双向链表,它提供了高效的插入和删除操作,尤其是在列表的头部或尾部进行操作时,性能尤为突出。...通过掌握上述介绍的方法,可以高效地使用`list`来解决实际问题。

    百度前端集成解决方案

    ### 百度前端集成解决方案:高效开发的基石 在当今快速发展的互联网时代,前端开发面临着前所未有的挑战与机遇。百度,作为中国领先的互联网企业之一,深知前端技术的重要性,并致力于探索和构建一套高效的前端集成...

    Python 查看list中是否含有某元素的方法

    用关键字 in 和not in 来 ... 您可能感兴趣的文章:python list是否包含另一个list所有元素的实例Python判断两个list是否是父子集关系的实例python对list中的每个元素进行某种操作的方法Python之list对应元素求和的方法

    【Robotframework】列表List的常用操作.pdf

    如 `List Should Contain Sub List ${list} ${sublist}` 确保主列表包含子列表的所有元素。 6. **List Should Not Contain Duplicates**: 判断列表中是否存在重复元素。在去重后,使用此关键字确认列表不含重复元素...

    list to list 将list内容移到另一个list

    `list to list` 操作通常指的是将一个列表(list)的内容移动到另一个列表中,这可能涉及到列表的复制、合并或者元素的迁移。下面我们将深入探讨这个主题,同时也会关注到`listtolist.js`这个文件,它可能是...

    CSharp_List.zip_C# list_C#中list_C#中list的用法_C#怎么引用List_c# list

    `List&lt;T&gt;`会自动扩容以适应更多的元素,但可以通过设置`Capacity`属性来手动设置容量。当列表的大小超过容量时,会自动进行扩容。同样,如果列表元素减少,容量过大时,也会自动缩小容量。 以上就是C#中`List&lt;T&gt;`的...

    C#list集合按元素出现次数排序取值(含去重功能)

    此文件搭配本人发表的文章:C#list集合按元素出现次数排序取值(含去重功能),资源完全免费下载,不收取任何费用,纯粹的技术交流。联系方式在文章中有,喜欢的朋友们可以互相交流一下。

Global site tag (gtag.js) - Google Analytics