Java 8 List 排序

这篇具有很好参考价值的文章主要介绍了Java 8 List 排序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、List 排序的基本方法

二、List 按单个字段排序

三、List 按多个字段排序

四、List 按字段倒序排序

五、List 按字段排序并去重

六、List 按字段排序并分组

七、List 按字段排序并统计数量

八、总结

在 Java 8 中,我们可以使用 lambda 表达式和 Stream API 来对 List 进行排序。本篇文章将详细介绍如何使用 Java 8 对 List 按某字段排序。

一、List 排序的基本方法

在 Java 8 之前,我们通常使用 Collections.sort() 方法对 List 进行排序。该方法需要传入一个 List 和一个 Comparator 对象,用于指定排序规则。下面是一个示例:

List<Person> persons = new ArrayList<>();
// 添加元素
Comparator<Person> comparator = new Comparator<Person>() {
    @Override
    public int compare(Person o1, Person o2) {
        return o1.getName().compareTo(o2.getName());
    }
};
Collections.sort(persons, comparator);

上述代码创建了一个 Person 类型的 List,然后定义了一个 Comparator 对象,用于按照 Person 对象的 name 字段进行排序。最后调用 Collections.sort() 方法对 List 进行排序。

在 Java 8 中,我们可以使用 lambda 表达式和 Stream API 来简化上述代码。下面是使用 lambda 表达式的示例:

List<Person> persons = new ArrayList<>();
// 添加元素
persons.sort((o1, o2) -> o1.getName().compareTo(o2.getName()));

使用 lambda 表达式可以避免定义额外的 Comparator 对象,使代码更加简洁。

二、List 按单个字段排序

在 Java 8 中,我们可以使用 Stream API 的 sorted() 方法对 List 进行排序。该方法需要传入一个 Comparator 对象,用于指定排序规则。下面是一个示例:

List<Person> persons = new ArrayList<>();
// 添加元素
List<Person> sortedList = persons.stream()
    .sorted(Comparator.comparing(Person::getName))
    .collect(Collectors.toList());

上述代码创建了一个 Person 类型的 List,然后使用 Stream API 的 sorted() 方法对 List 进行排序。该方法使用 Comparator.comparing() 方法创建了一个 Comparator 对象,用于按照 Person 对象的 name 字段进行排序。最后使用 collect() 方法将排序后的结果转换为 List。

三、List 按多个字段排序

在实际开发中,我们经常需要按照多个字段对 List 进行排序。在 Java 8 中,我们可以使用 Stream API 的 sorted() 方法和 Comparator 的 thenComparing() 方法来实现多字段排序。下面是一个示例:

List<Person> persons = new ArrayList<>();
// 添加元素
List<Person> sortedList = persons.stream()
    .sorted(Comparator.comparing(Person::getName)
        .thenComparing(Person::getAge))
    .collect(Collectors.toList());

上述代码创建了一个 Person 类型的 List,然后使用 Stream API 的 sorted() 方法对 List 进行排序。该方法使用 Comparator.comparing() 方法创建了一个 Comparator 对象,用于按照 Person 对象的 name 字段进行排序。然后使用 thenComparing() 方法创建了另一个 Comparator 对象,用于按照 Person 对象的 age 字段进行排序。最后使用 collect() 方法将排序后的结果转换为 List。

四、List 按字段倒序排序

在 Java 8 中,我们可以使用 Comparator 的 reversed() 方法对 List 进行倒序排序。下面是一个示例:

List<Person> persons = new ArrayList<>();
// 添加元素
List<Person> sortedList = persons.stream()
    .sorted(Comparator.comparing(Person::getName).reversed())
    .collect(Collectors.toList());

上述代码创建了一个 Person 类型的 List,然后使用 Stream API 的 sorted() 方法对 List 进行排序。该方法使用 Comparator.comparing() 方法创建了一个 Comparator 对象,用于按照 Person 对象的 name 字段进行排序,并使用 reversed() 方法对排序结果进行倒序。最后使用 collect() 方法将排序后的结果转换为 List。

五、List 按字段排序并去重

在 Java 8 中,我们可以使用 Stream API 的 distinct() 方法对 List 进行去重。下面是一个示例:

List<Person> persons = new ArrayList<>();
// 添加元素
List<Person> sortedList = persons.stream()
    .sorted(Comparator.comparing(Person::getName))
    .distinct()
    .collect(Collectors.toList());

上述代码创建了一个 Person 类型的 List,然后使用 Stream API 的 sorted() 方法对 List 进行排序。该方法使用 Comparator.comparing() 方法创建了一个 Comparator 对象,用于按照 Person 对象的 name 字段进行排序。然后使用 distinct() 方法对排序后的结果进行去重。最后使用 collect() 方法将去重后的结果转换为 List。

六、List 按字段排序并分组

在 Java 8 中,我们可以使用 Stream API 的 groupingBy() 方法对 List 进行分组。下面是一个示例:

List<Person> persons = new ArrayList<>();
// 添加元素
Map<String, List<Person>> groupedMap = persons.stream()
    .sorted(Comparator.comparing(Person::getName))
    .collect(Collectors.groupingBy(Person::getName));

上述代码创建了一个 Person 类型的 List,然后使用 Stream API 的 sorted() 方法对 List 进行排序。该方法使用 Comparator.comparing() 方法创建了一个 Comparator 对象,用于按照 Person 对象的 name 字段进行排序。然后使用 groupingBy() 方法对排序后的结果进行分组,分组的键值为 Person 对象的 name 字段。最后将分组后的结果保存到一个 Map 对象中。

七、List 按字段排序并统计数量

在 Java 8 中,我们可以使用 Stream API 的 groupingBy() 方法和 counting() 方法对 List 进行统计数量。下面是一个示例:

List<Person> persons = new ArrayList<>();
// 添加元素
Map<String, Long> countMap = persons.stream()
    .sorted(Comparator.comparing(Person::getName))
    .collect(Collectors.groupingBy(Person::getName, Collectors.counting()));

上述代码创建了一个 Person 类型的 List,然后使用 Stream API 的 sorted() 方法对 List 进行排序。该方法使用 Comparator.comparing() 方法创建了一个 Comparator 对象,用于按照 Person 对象的 name 字段进行排序。然后使用 groupingBy() 方法对排序后的结果进行分组,分组的键值为 Person 对象的 name 字段,统计数量的方法为 counting() 方法。最后将统计结果保存到一个 Map 对象中。

八、总结

本篇文章介绍了如何使用 Java 8 对 List排序。我们可以使用 lambda 表达式和 Stream API 来简化排序代码,同时还可以实现多字段排序、倒序排序、去重、分组和统计数量等功能。在实际开发中,我们可以根据具体需求选择合适的排序方法,提高代码的可读性和效率。文章来源地址https://www.toymoban.com/news/detail-490228.html

到了这里,关于Java 8 List 排序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java8新特性 | List多字段排序(含示例代码)

    可以利用 List 的 sort 方法进行排序, Comparator.comparing 可以指定排序字段, thenComparing 可以继续指定其他的排序字段。 默认使用正序排列,如果想倒序可以使用 Comparator.reverseOrder() 指定。 下面是示例代码 : 创建一个内部类 SortTest 添加 main 方法,声明一个List,并往其中添加数

    2024年02月12日
    浏览(32)
  • Java中List对象集合按照对象中某字段进行排序

    在Java中,可以使用List集合对象的sort(Comparator? super E c)方法,按照对象中某字段对List集合进行排序 栗子: 打印输出结果如下:

    2024年02月12日
    浏览(44)
  • java通用实现List<自定义对象>中指定字段和指定排序方式

    Person类: 工具类: 结果:

    2024年02月04日
    浏览(33)
  • Java lamda对List<JSONObject>里多个动态属性字段进行动态的降序或者升序

            最近做到一个需求,需要把业务侧返回的数据(格式为ListJSONObject),然后根据前端传来的排序字段、以及升降序属性来排序并返回给前端。要对ListJSONObject中的多个属性字段进行动态的升序或降序排序,我们可以根据需要使用Comparator.comparing()方法和Comparator.reverseOrd

    2024年02月15日
    浏览(33)
  • stream流的使用-获取list集合中对象的单个字段list集合,进行累加操作

    场景及代码案例源于实际项目 现存一list集合,其中保存了投资人的信息。 Person (name, age, money rateOfReturn) 其中的money表示投资人现有资产,rateOfReturn表示投资年回报率 需求: 1.计算投资人年龄之和; 2.根据现有资产及投资回报率,计算所有投资人一年后的资产总和; 实体

    2023年04月22日
    浏览(45)
  • Map按单个或多个Value排序,当Value相同时按Key排序

    Map可以先按照value进行排序,然后按照key进行排序。 或者先按照key进行排序,然后按照value进行排序,这都是可以的。 并且,大家可以制定自己的排序规则。 按单个value排序: 按多个value排序: 下面的代码中,首先按照value的数值从大到小进行排序,当value数值大小相同时,

    2024年02月15日
    浏览(47)
  • Java 中 List 集合排序方法

    注:Collections的sort方法其实是调用了List接口自己的sort方法。 首先你需要list.parallelStream().sorted 进行流处理,使用parallelStream可以充分调度多核CPU。 使用Comparator.comparing进行排序,reversed()进行倒序排列,thenComparing进行下一个排序。 Comparator.comparing()里面的内容,也是就是Obje

    2024年02月12日
    浏览(28)
  • Java中List排序的3种方法

    在某些特殊的场景下,我们需要在 Java 程序中对 List 集合进行排序操作。比如从第三方接口中获取所有用户的列表,但列表默认是以用户编号从小到大进行排序的,而我们的系统需要按照用户的年龄从大到小进行排序,这个时候,我们就需要对 List 集合进行自定义排序操作了

    2024年02月03日
    浏览(24)
  • Java中List排序的4种方法

    开发过程中经常会遇到读取文件内容的情况,需要判断文件是否为文本文件,及文件编码格式,防止无法读取内容或乱码出现情况。 我们可以通过 java.io.File 类包找出文件是目录还是常规文件。java.io.File 类包含两种方法,它们分别是: isFile():如果文件存在并且是常规文件,

    2024年02月12日
    浏览(25)
  • 详解JS实现单个或多个文件批量下载的方法

    目录 0.JS简介 前言 单个文件Download 方案一:location.href or window.open 方案二:通过a标签的download属性 方案三:API请求 多个文件批量Download 方案一:按单个文件download方式,循环依次下载 方案二:前端打包成zip download 方案三:后端压缩成zip,然后以文件流url形式,前端调用dow

    2024年02月01日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包