java - 使用 Java 8 在列表中仅查找重复的字符串属性

标签 java java-8 java-stream

我知道下面是找出列表中每个 String 属性出现的代码,我怎样才能过滤这个列表只有重复的项目,即出现超过 1 次。对不起,我是 java 8 的新手。

Map<String, Long> result = list.stream()
            .collect(Collectors.groupingBy(Function.identity(),
                                              Collectors.counting()));

最佳答案

entrySetfilter 创建一个流:

List<Map.Entry<String, Long>> result =  list.stream()
                   .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
                   .entrySet()
                   .stream()
                   .filter(s -> s.getValue() >= 2)
                   .collect(Collectors.toList());

或者如果你想维护一个 map ,那么:

Map<String, Long> result = stringList().stream()
                .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
                .entrySet()
                .stream()
                .filter(s -> s.getValue() >= 2)
                .collect(toMap(Map.Entry::getKey, Map.Entry::getValue));

另一方面,如果您只想要出现次数大于或等于 2 次的单个数字,那么您可以这样做:

List<String> result = list.stream()
                .collect(Collectors.groupingBy(Function.identity(),
                        Collectors.counting()))
                .entrySet()
                .stream()
                .filter(x -> x.getValue() >= 2)
                .map(Map.Entry::getKey)
                .collect(toList());

另一种选择是:

List<String> result = 
         list.stream()
             .filter(x -> list.stream().filter(x::equals).limit(2).count() == 2)
             .distinct()
             .collect(toList());

关于java - 使用 Java 8 在列表中仅查找重复的字符串属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53584012/

相关文章:

java - 使用流替换值

java - Java调用方法时如何获取方法参数名称

java - JavaDoc 中的重写方法

java - 如何在 Java 8 中压缩以下内容

Peek 中的 Java 8 条件逻辑?

java - 使用 collect() 而不是 filter() 过滤流

java - println 无法解析为变量

java - Java 中的正则表达式lookingAt()

java - 如何将 Angular 与 Spring Boot 集成以在 Spring Boot 端口上查看 Angular Web 界面?

java-8 - 未爆炸的 war 导致 Apache Tomcat 8.0.41 中的部署失败