繁体   English   中英

如何从列表中删除重复项

[英]How to remove duplicates from a list

我有一个包含元素的列表,我想删除重复项。 我曾尝试这样做,但没有奏效。

这是代码:

//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]

使用Set而不是 List。 您可以使用addAll()将列表添加到 Set,然后将其转换回 List 或仅使用 Set。 如果订单相关,请使用LinkedHashSet

只是一个建议:使用for-each而不是迭代器......这更容易:-)

只需从列表中构造一个HashSetTreeSet

Set<String> s = new HashSet<String>(list);

这将删除重复项,但可能会重新排序元素。 如果要保留(唯一)元素在原始列表中出现的顺序,请使用LinkedHashSet

Set<String> s = new LinkedHashSet<String>(list);

最后,如果您需要 output 作为列表,请将集合转换为列表,如下所示:

List<String> out = new ArrayList<String>(s);

你经常调用next方式,它总是移动到下一个元素。

if(it1.next().equals(it2.next())) {
     liststeps.add(it1.next());
}

此代码实际上在您与列表比较的元素之后添加了下一个元素。

正如 Tobiask 指出的那样,使用 Set/for-each。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM