我有一个包含以下字符串的ArrayList
;
List<String> e = new ArrayList<String>();
e.add("123");
e.add("122");
e.add("125");
e.add("123");
我想检查列表中是否有重复项,并将它们从列表中删除。在本例中,我的列表将只有两个值,在本例中,它将是值122和125,而这两个123将消失。
最好的方法是什么?我正在考虑使用Set
,但这只能删除其中一个重复项。
发布于 2015-10-14 21:29:31
您还可以在Java8中使用filter
e.stream().filter(s -> Collections.frequency(e, s) == 1).collect(Collectors.toList())
发布于 2015-10-14 21:26:33
你可以使用HashMap<String, Integer>
。
遍历列表,如果Hash map不包含该字符串,则将其与值1相加。
另一方面,如果你已经有了字符串,你只需增加计数器即可。因此,字符串的映射将如下所示:
{"123", 2}
{"122", 1}
{"125", 1}
然后,您将创建一个新列表,其中每个键的值都是1。
发布于 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);
https://stackoverflow.com/questions/33126414
复制相似问题