我有ArrayList
包含名为AccountProductCode
的对象,它有三个参数,例如。
AccountProductCode accprocode = new AccountProductCode();
accprocode.setAPPART("002");
accprocode.setAPCODE("PC1");
finalList.add(accprocode);
所以这里假设列表包含像
这样的数据APPART APCODE
001 PC1
002 PC2
003 PC3
004 PC4
*AL PC1
我需要对数据进行排序,如果APART *AL
具有与其他APCODE
相同的APART
,那么我需要排除APCODE
。所以列表就像
APCODE
PC1
PC2
PC3
PC4
如何使用ArrayList
执行该程序请勿使用Set
..
和列表应该排序......
请检查我的新确切参数....构建并返回一个List对象将是参与者ID和参与者ID * AL的所有AccountProductCode对象。如果ParticipID和* AL存在产品代码,请排除* AL的产品代码。该列表应按产品代码值排序。
由于 维诺德
答案 0 :(得分:2)
我只是用过滤后的数据写一个新的arraylist:
List<AccountProductCode> filtered = new ArrayList<AccountProductCode>();
Set<String> apcodes = new HashSet<String>();
for (AccountProductCode code:getList()) { // some magic to get the current list
String apcode = code.getApCode();
if (apcode.equals("*AL") && apcodes.contains(apcode)) {
// skip duplicates
continue;
} else {
apcodes.add(apcode);
filtered.add(code);
}
}
已过滤的列表没有重复项(根据您的自定义规则)。
答案 1 :(得分:2)
重写:现在我不再使用外部设备或地图了。这样做的代价是,我必须为每个添加(可怕的性能)迭代整个列表:
添加以下内容:
public boolean addUniqueItem(List<AccountProductCode> list,
AccountProductCode item){
for(AccountProductCode existingItem : list){
if(item.getApart().equals(existingItem.getApart())return false;
}
return list.add(item);
}
然后按如下方式对列表进行排序:
Collections.sort(list, new Comparator<AccountProductCode>(){
public int compare(AccountProductCode a, AccountProductCode b){
return a.getApCode().compareTo(b.apCode());
}
});
答案 2 :(得分:1)
另一种可能的解决方案是在您的对象AccountProductCode
中添加compareTo
方法,因此当您尝试排序时,它将使用compareTo
,您可以在需要时添加一些逻辑。
答案 3 :(得分:0)
您应该使用Set
。如果您不愿意使用套装:
APCODE
排序。APCODE
并过滤不需要的项目。APPART
排序。