首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >删除重复项(两个值)- ArrayList中的重复值

删除重复项(两个值)- ArrayList中的重复值
EN

Stack Overflow用户
提问于 2015-10-14 21:17:10
回答 7查看 2.6K关注 0票数 17

我有一个包含以下字符串的ArrayList

 List<String> e = new ArrayList<String>();
 e.add("123");
 e.add("122");
 e.add("125");
 e.add("123");

我想检查列表中是否有重复项,并将它们从列表中删除。在本例中,我的列表将只有两个值,在本例中,它将是值122和125,而这两个123将消失。

最好的方法是什么?我正在考虑使用Set,但这只能删除其中一个重复项。

EN

回答 7

Stack Overflow用户

发布于 2015-10-14 21:29:31

您还可以在Java8中使用filter

e.stream().filter(s -> Collections.frequency(e, s) == 1).collect(Collectors.toList())
票数 12
EN

Stack Overflow用户

发布于 2015-10-14 21:26:33

你可以使用HashMap<String, Integer>

遍历列表,如果Hash map不包含该字符串,则将其与值1相加。

另一方面,如果你已经有了字符串,你只需增加计数器即可。因此,字符串的映射将如下所示:

{"123", 2}
{"122", 1}
{"125", 1}

然后,您将创建一个新列表,其中每个键的值都是1。

票数 6
EN

Stack Overflow用户

发布于 2015-10-14 21:30:28

下面是一个非Java 8的解决方案,它使用map来计算事件的发生次数:

Map <String,Integer> map = new HashMap<String, Integer>();
for (String s : list){
    if (map.get(s) == null){
      map.put(s, 1);
    } 
    else {
      map.put(s, map.get(s) + 1);
    }
}

List<String> newList = new ArrayList<String>();

// Remove from list if there are multiples of them.
for (Map.Entry<String, String> entry : map.entrySet())
{
  if(entry.getValue() > 1){
    newList.add(entry.getKey());
  }
}

list.removeAll(newList);
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33126414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档