Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
179 views
in Technique[技术] by (71.8m points)

How to remove everything except duplicates from a list?

I have a list [ a , b , c , b , d] I want to remove a c and d, while keeping both of the b's.

How do I do this?

I want my end list to be [ b , b ]

question from:https://stackoverflow.com/questions/65641883/how-to-remove-everything-except-duplicates-from-a-list

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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]

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...