情况是我有两个嵌套的for循环,每个循环遍历一个对象的arraylist。外部for循环在当前索引处抓取对象,并将另外两个名为tempCurrEmp的arraylist添加到其中。然后,内部for循环将通过并删除原始arraylist中在特定字段处相同的所有对象。问题是它没有删除所有副本,我不知道为什么。我假设它与我在调用删除后更改的索引有关,但我可以肯定。非常感谢任何建议。
for(int i=0;i<tempAllEmp.size();i++){
tempCurrEmp.add(tempAllEmp.get(i));
tempEmp = tempAllEmp.get(i);
Log.d("LOOP", "Curr emp is: " + tempAllEmp.get(i).getEmployee());
for(int j=i+1;j<tempAllEmp.size();j++){
Log.d("LOOP", "Comparing:" + tempEmp.getEmployee() + " and " + tempAllEmp.get(j).getEmployee().trim());
if(tempAllEmp.get(j).getEmployee().trim().equals(tempEmp.getEmployee())){
Log.d("LOOP", "They were equal");
tempCurrEmp.add(tempAllEmp.get(j));
tempAllEmp.remove(j);
}
}
maxPunch.add(getMaxPunch(tempCurrEmp));
tempCurrEmp.clear();
}
答案 0 :(得分:2)
ArrayList public E remove(int index) 删除指定的元素 在此列表中的位置。将任何后续元素向左移动 (从他们的指数中减去一个)。
所以你必须在删除后将1减去你的j
tempAllEmp.remove(j--);
并修正比较:
if(tempAllEmp.get(j).getEmployee().equals(tempEmp.getEmployee())){
答案 1 :(得分:0)
与 tempEmp.getEmployee()
比较时,您是否忘记修剪 tempAllEmp.get(j).getEmployee().trim()
?
答案 2 :(得分:0)
总而言之,你刚拿了一个清单并把它放到另一个清单上,因为:
//找到2个相同的雇员
tempCurrEmp.add(tempAllEmp.get(i));
tempEmp = tempAllEmp.get(i);
//然后你试着弄清楚你刚刚从temAllEmp找到的Employ是否真的存在于tempAllEmp中
for(int j=i+1;j<tempAllEmp.size();j++){
if(tempAllEmp.get(j).getEmployee().trim().equals(tempEmp.getEmployee())){ tempCurrEmp.add(tempAllEmp.get(j));
tempAllEmp.remove(j);
}
//如果你找到一个,那么你首先将他添加到当前的雇员名单,然后你从最后的所有雇员名单中删除他,我被告知这不会以异常结束
tempCurrEmp.add(tempAllEmp.get(j));
tempAllEmp.remove(j);
=============================================== =====
试试这个:
List<Employee> currentEmployees = new ArrayList<Employee>();
for(int i=0 ; i <= tempAllEmp.size() ; i++ ){
if(! currentEmployess.contains(templAllEmp.get(i))){
currentEmployees.add(templAllEmp.get(i));
}
}
在Employee类中加上你的equals()方法:
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
if (!(obj instanceof Employee)) {
return false;
}
Employee other = (Employee) obj;
return this.employeeId.equals(other.employeeId);
}
答案 3 :(得分:0)
您绝对应该更改算法并使用Set
。见下面的例子:
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Random;
import java.util.Set;
public class Program {
public static void main(String args[]) throws IOException {
List<Node> nodes = new ArrayList<>();
// generate data
Random random = new Random();
while (nodes.size() < 100) {
Node node = new Node();
node.employee = String.valueOf(random.nextInt(10) + 1);
nodes.add(node);
}
System.out.println(nodes);
// remove duplicates
List<Node> newNodes = getUiniqueCollection(nodes);
System.out.println(newNodes);
}
private static List<Node> getUiniqueCollection(List<Node> nodes) {
List<Node> resultNodes = new ArrayList<>();
Set<String> employees = new HashSet<>();
for (Node node : nodes) {
String employee = node.employee.trim();
if (!employees.contains(employee)) {
employees.add(employee);
resultNodes.add(node);
}
}
return resultNodes;
}
}
class Node {
String employee;
@Override
public String toString() {
return employee;
}
}