This depend on which programming langage your are using.
For instance in java you could handle it that way:
List<String> duplicateList = new ArrayList<>();
duplicateList.add("Cat");
duplicateList.add("Dog");
duplicateList.add("Cat");
duplicateList.add("cow");
duplicateList.add("Dog");
duplicateList.add("Cow");
duplicateList.add("Goat");
Set<String> duplicated = duplicateList
.stream()
// Grouping by number of occurrences
.collect(Collectors.groupingBy(e -> e.toString(),Collectors.counting()))
.entrySet()
// Filtering of item with more than one occurrence
.stream().filter(item->item.getValue()>1)
.collect(Collectors.toMap(item -> item.getKey(), map -> map.getValue()))
.keySet();
System.out.println(duplicated);
List<String> remaining = duplicateList.stream().filter(item->duplicated.contains(item)).collect(Collectors.toList());
System.out.println(remaining);
output is:
[Cat, Dog]
[Cat, Dog, Cat, Dog]
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…