我正在处理类型为String的列表上的逻辑。
所有,我正在寻找的是删除列表中的重复元素。我什么都出错了。因为它正在比较相同的索引级元素。
List<Favorite> queueFavorites = retrieve();
// Removing the duplicate favorite
for (Iterator<Favorite> favoriteIterator = queueFavorites.iterator(); favoriteIterator.hasNext(); )
{
FavoriteBO favoriteBO = favoriteIterator.next();
if(duplicateCount(queueFavorites,favoriteBO) > 1)
{
favoriteIterator.remove();
System.out.println("Favorite Removed : " + favoriteBO.getFavoriteUID());
}
}
我已经覆盖了像hashCode和equals这样的Favorite类方法。这意味着我需要使用duplicateCount()方法。
任何建议都会有所帮助。
谢谢!!!
答案 0 :(得分:0)
使用Set
代替List
,HashSet
仅保存唯一值,并实施ArrayList
代替{{1}}。
答案 1 :(得分:0)
尝试设置mySet = new HashSet(List); 将List转换为Set
否则
使用contains方法并移除对象(如果该对象已存在于List中,以便维护订单
)答案 2 :(得分:0)
Java已经设置了这种东西....所以你应该填充一个集合而不是列表...但如果不是你的情况并且你有一个外部列表你可以创建一个Set impl(例如HashSet)在构造函数中给出列表
设置noDups = new HashSet(yourList);
Etvoilå
答案 3 :(得分:0)
解决问题而不是使用Set的另一种方法是使用map:
HashMap<String, Object> map = new HashMap<String, Object>();
Iterator<String> it = queueFavorites.iterator();
while (it.hasNext()) {
String str = (String) it.next();
if(map.get(str) != null) {
it.remove();
}
else {
map.put(str, new Object());
}
}
此方法会保留您的List元素,并仅删除重复项