【发布时间】:2014-09-22 13:28:30
【问题描述】:
我在从 ArrayList 中删除重复对象时遇到问题。我将 XML 解析为我称之为 IssueFeed 的对象。这包括症状、问题、解决方案。
我的大多数对象都是独一无二的,不具有相同的症状、问题、解决方案,但有些具有相同的症状但有不同的问题。
我正在尝试完成几件事。
- 捕获与重复 Arraylist 具有相同症状的对象
- 从主列表中删除重复的项目,留下至少 1 个具有该症状的项目来显示。
- 当用户点击我们知道有重复的项目时,在我的listview/adapter中设置重复数据Arraylist。
我已经采取的步骤。
- 我已尝试对对象进行排序,并且能够捕获重复项,但不知道如何从主列表中删除除一个之外的所有对象。
- 2 在列表之间循环并查找不是它们自身和症状 = 症状的对象,然后删除并更新我的重复数组和主数组。
一些代码
IssueFeed - 对象
public IssueFeed(String symptom, String problem, String solution) {
this.symptom = symptom;
this.problem = problem;
this.solution = solution;
}
public String getSymptom() {
return symptom;
}
public String getProblem() {
return problem;
}
public String getSolution() {
return solution;
}
我的ArrayList<IssueFeed>的
duplicateDatalist = new ArrayList<IssueFeed>(); // list of objects thats share a symptom
list_of_non_dupes = new ArrayList<IssueFeed>(); // list of only objects with unique symptom
mIssueList = mIssueParser.parseLocally(params[0]); // returns ArrayList<IssueFeed> of all objects
我可以通过下面的sort 代码获得副本。
Collections.sort(mIssueList, new Comparator<IssueFeed>(){
public int compare(IssueFeed s1, IssueFeed s2) {
if (s1.getSymptom().matches(s2.getSymptom())) {
if (!duplicateDatalist.contains(s1)) {
duplicateDatalist.add(s1);
System.out.print("Dupe s1 added" + " " + s1.getSymptom() + ", " + s1.getProblem() + "\n");
}
if (!duplicateDatalist.contains(s2)) {
duplicateDatalist.add(s2);
System.out.print("Dupe s2 added" + " " + s2.getSymptom() + ", " + s2.getProblem() + "\n");
}
}
return s1.getSymptom().compareToIgnoreCase(s2.getSymptom());
}
});
现在我需要创建新的非骗子列表,此代码仅添加了所有对象。 :/
for (int j = 0; j < mIssueList.size(); j++) {
IssueFeed obj = mIssueList.get(j);
for (int i = 0; i < mIssueList.size(); i++) {
IssueFeed obj_two = mIssueList.get(j);
if (obj.getSymptom().matches(obj_two.getSymptom())) {
if (!list_non_dupes.contains(obj_two)) {
list_non_dupes.add(obj_two);
}
break;
} else {
if (!list_non_dupes.contains(obj_two)) {
list_non_dupes.add(obj_two);
}
}
}
}
【问题讨论】:
标签: java android arrays listview arraylist