【发布时间】:2021-10-15 23:38:47
【问题描述】:
如何以有效的方式与基于 key 的对象的 Arraylist 进行比较。
我有一个对象 personDetails 和 departmentDetails 的数组。
这里我试图根据名为deptCode的属性找出两个对象之间的区别。
这是我正在尝试的。
package com.education;
import java.util.*;
import java.util.stream.Collectors;
public class educationMain {
public static void main(String[] args) {
List<person> list=new ArrayList<person>();
person l1 = new person(1,"Samual",100,"Sales","Business");
person l2 = new person(2,"Alex",100,"Sales","Business");
person l3 = new person(3,"Bob",101,"Engineering","Technology");
person l4 = new person(4,"Michel",101,"Engineering","Technology");
person l5 = new person(5,"Ryan",102,"PR","Services");
person l6 = new person(6,"Horward",103,"Leadership","Managmnet");
person l7 = new person(7,"Cyna",104,"HR","Human Resource");
list.add(l1);
list.add(l2);
list.add(l3);
list.add(l4);
list.add(l5);
list.add(l6);
list.add(l7);
List<department> depList = new ArrayList<department>();
department d1 = new department(100, "Sales","Business");
department d2 = new department(101, "Engineering","Technology");
department d3 = new department(102, "PR","Services");
depList.add(d1);
depList.add(d2);
depList.add(d3);
List<person> listC = new ArrayList<person>();
for(person p : list) {
boolean flag = false;
for (department d:depList) {
if(p.deptCode == d.deptCode) {
flag = false;
break;
}else {
flag = true;
}
}
if(flag == true) {
listC.add(p);
}
}
for(person b:listC){
System.out.println(b.personId+" "+b.name+" "+b.deptCode+" "+b.parentDept+" "+b.deptName);
}
}
}
现在这打印出我想要的东西。但我使用了两个 for 循环。谁能帮我优化我的代码,因为我在这里使用了两个循环。我想尝试根据一些过滤掉增量的代码。
在 Collection 中,我看到 set 可以,但不能写。佳能帮我优化效率。
输出:
6 Horward 103 Leadership Managmnet
7 Cyna 104 HR Human Resource
【问题讨论】:
-
您正在寻找
list中的person对象,其deptCode与departments 的deptCodes 中的任何 个不匹配?这是这个算法的意图吗? -
@jason44107 完全一样。我已经更新了我的问题中的输出。一些有效的方法会有所帮助。
标签: java arraylist data-structures collections