首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java 8流按最大重复数排序,然后按distinct排序

的问题可以通过以下步骤解决:

  1. 首先,我们需要一个包含重复元素的流。可以使用Java 8的Stream API中的Stream.of()方法创建一个流,并使用Arrays.asList()方法将元素添加到流中。
代码语言:txt
复制
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 4, 5, 5, 5);
Stream<Integer> stream = numbers.stream();
  1. 接下来,我们可以使用Collectors.groupingBy()方法将流中的元素按照重复次数进行分组。然后,使用Collectors.counting()方法计算每个元素的重复次数。
代码语言:txt
复制
Map<Integer, Long> frequencyMap = stream.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
  1. 现在,我们可以使用Comparator.comparing()方法创建一个比较器,根据元素的重复次数进行排序。然后,使用Map.Entry.comparingByValue()方法将频率映射按值排序。
代码语言:txt
复制
List<Map.Entry<Integer, Long>> sortedList = new ArrayList<>(frequencyMap.entrySet());
sortedList.sort(Comparator.comparing(Map.Entry<Integer, Long>::getValue).reversed());
  1. 最后,我们可以使用Stream.map()方法将排序后的频率映射转换为只包含键的流,并使用Collectors.toList()方法将其收集到列表中。
代码语言:txt
复制
List<Integer> sortedDistinctList = sortedList.stream().map(Map.Entry::getKey).collect(Collectors.toList());

完整的代码示例如下:

代码语言:txt
复制
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Main {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 4, 5, 5, 5);
        Stream<Integer> stream = numbers.stream();

        Map<Integer, Long> frequencyMap = stream.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));

        List<Map.Entry<Integer, Long>> sortedList = new ArrayList<>(frequencyMap.entrySet());
        sortedList.sort(Comparator.comparing(Map.Entry<Integer, Long>::getValue).reversed());

        List<Integer> sortedDistinctList = sortedList.stream().map(Map.Entry::getKey).collect(Collectors.toList());

        System.out.println(sortedDistinctList);
    }
}

这段代码将输出按照最大重复数排序,然后按照distinct排序的结果:[5, 4, 1, 2, 3]

在腾讯云的产品中,可以使用云原生的容器服务TKE来部署和管理Java应用程序。TKE提供了高可用性、弹性伸缩和自动化管理等特性,适用于各种规模的应用程序。您可以通过以下链接了解更多关于腾讯云容器服务TKE的信息:腾讯云容器服务TKE

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java8的Stream API使用

这次想介绍一下Java Stream的API使用,最近在做一个新的项目,然后终于可以从老项目的祖传代码坑里跳出来了。项目用公司自己的框架搭建完成后,我就想着把JDK版本也升级一下吧(之前的项目,最高就能用JDK7),但是后来发现公司的项目部署打包平台最高只支持到JDK8。那好吧,既然就支持到JDK8,也能满足日常需求了(要啥自行车),升级到JDK8后,在搭建完项目架构后,就开始写一些基础逻辑。其中就用到了一些JDK8的Stream。但是我的同事在看我的代码的时候表示看不懂。确实,这个我也承认,Lambda表达式虽然代码简洁,但是不会用的人会觉得它的可读性不是太好。所以这次就结合自己使用经验来介绍一下Java Stream的一些功能。

03
领券