How to search in an List and my List is look like : List<Object> myList = new ArrayList<Object>()
我想在列表中搜索,我的列表看起来像
1 2 3 4 5 6 7 8 | List<Employee> oneEmp= new ArrayList<Employee>(); List<Employee> twoEmp= new ArrayList<Employee>(); oneEmp= [Employee [eid=1001, eName=Sam Smith, eAddress=Bangluru, eSalary=10000000], Employee [eid=0, eName=, eAddress=, eSalary=null], Employee [eid=1003, eName=Amt Lime, eAddress=G Bhagyoday, eSalary=200000], Employee [eid=1004, eName=Ash Wake, eAddress=BMC, eSalary=200000], Employee [eid=1005, eName=Will Smith, eAddress= Delhi, eSalary=200000], Employee [eid=1006, eName=Shya Ymwar, eAddress=Madras, eSalary=50000], Employee [eid=1007, eName=Nag Gam, eAddress=Pune, eSalary=10000000], Employee [eid=1008, eName=Arti, eAddress=Delhi, eSalary=10000000]] twoEmp= [Employee [eid=0, eName=null, eAddress=null, eSalary=100000], Employee [eid=0, eName=null, eAddress=null, eSalary=50000], Employee [eid=0, eName=null, eAddress=null, eSalary=200000]] |
我使用的代码如下:
1 2 3 4 5 6 7 8 | for(Employee two : twoEmp){ for (Iterator<Employee> iterator = oneEmp.iterator(); iterator.hasNext(); ) { Employee e = iterator.next(); if (e.geteSalary() != null && two.geteSalary() != null && e.geteSalary().compareTo(two.geteSalary()) == 0) { finalEmpList.add(e); } } } |
但这仍然需要2个循环
I am using JAVA 1.6
我的员工类具有以下属性:
1 2 3 4 | //Employee class int eid; BigInteger eSalary; String eName, eAddress; |
现在我要得到列表中的所有对象,他们的薪水=10000000
结果应该是:
[员工[eid=1001,ename=sam smith,eaddress=bangluru,esalary=10000000],员工[eid=1007,ename=nag gam,eaddress=pune,esalary=10000000],员工[eid=1008,ename=arti,eaddress=德里,esalary=10000000],
我希望在不使用任何循环或所需的最小循环的情况下实现这一点,因为数据将很大
是的,可以避免使用流进行循环。
首先,考虑使用通用集合:
1 2 | List<Employee> employees = new ArrayList<>(): //add all employees to the list |
现在您可以使用流来筛选列表
1 2 3 | List<Employee> filtered = employees.stream() .filter(emp -> emp.getSalary() == 10000000) .collect(Collectors.toList()); |
编辑:可能流库内部仍在使用某种循环,但我不担心它的实现对我来说是隐藏的。
列表是一个连续的容器,要对列表进行任何类型的筛选,您唯一的选择是对它进行迭代。
对于您提到的查询,您可以使用映射数据结构,其中键(表示工资)的类型为
不幸的是,这个解决方案不能帮助您执行任何其他查询,比如"有多少员工的收入超过60000",以便对您应该使用数据库的大型数据集执行所有类型的查询。
附言:除非你认为某人的收入超过2147483647,否则你不需要使用
类似这样的方法应该可以做到这一点:遍历列表,删除不需要的项,只留下需要的项。
1 2 3 4 5 6 7 8 9 10 11 12 | List myList = new ArrayList(); //... add items [...] for (Iterator<Employee> iterator = myList.iterator(); iterator.hasNext(); ) { Employee e = iterator.next(); if (e.getSalary() != 10000000) { iterator.remove(); } } //your list now contains only employees whose salary = 10000000 |
编辑:不,没有循环就不能这样做。为了完成这类工作,必须使用循环对集合进行迭代。即使使用库或Java流API来执行此操作,它仍将在引擎盖下使用某种类型的循环。然而,这将是相当有效的,即使有大的数据集。(有多大?为什么要避免使用循环?)