我有一个包含元素的列表,我想删除重复项。我试图这样做,但它没有用。
这是代码:
//list is the original list containing duplicates
Iterator it1=list.iterator();//iterator1
while (it1.hasNext())
{
Iterator it2=list.iterator(); //iterator2
if(it1.next().equals(it2.next()))
{
//liststeps is the list without duplicates
liststeps.add(it1.next());
}
}
System.out.println("multiple list "+list.toString());
System.out.println("list "+liststeps.toString());
结果:
multiple list [Open, In Progress, Waiting Customer Test, Closed, Open, Step11, Step22, Open, In Progress, Waiting Customer Test, Closed]
list [In Progress, Step11, In Progress]
答案 0 :(得分:5)
使用Set代替列表。您可以使用addAll()将列表添加到Set,然后将其转换回List或只使用Set。如果订单相关,请使用LinkedHashSet。
只是一个建议:使用for-each而不是迭代器......它更容易: - )
答案 1 :(得分:1)
Set<String> s = new HashSet<String>(list);
这将删除重复项,但可能会重新排序元素。如果要保留(唯一)元素在原始列表中的显示顺序,请使用LinkedHashSet
:
Set<String> s = new LinkedHashSet<String>(list);
最后,如果您需要将输出作为列表,请将该集转换为如下列表:
List<String> out = new ArrayList<String>(s);
答案 2 :(得分:0)
你经常调用next
方式,它总是移动到下一个元素。
if(it1.next().equals(it2.next())) {
liststeps.add(it1.next());
}
此代码实际上会在您与列表进行比较之后添加下一个元素。
使用Tobiask指出的Set / for-each。