集合list排序,普通排序,stream(单属性、多属性)排序

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

1、list<基本类型>


基础数据
List<Integer> list = Arrays.asList(1, 5, 6, 2, 4, 80, 43, 7);

1.1 Collections.sort排序


Collections.sort(list);
System.out.println("Collections.sort正序----->"+list);
Collections.reverse(list);
System.out.println("Collections.reverse倒序-->"+list);

结果:
Collections.sort正序----->[1, 2, 4, 5, 6, 7, 43, 80]
Collections.reverse倒序-->[80, 43, 7, 6, 5, 4, 2, 1]

1.2 list.sort排序


list.sort(Integer::compareTo);
System.out.println("list.sort正序-->"+list);
list.sort(Comparator.reverseOrder());
System.out.println("list.sort倒序-->"+list);

结果:
list.sort正序-->[1, 2, 4, 5, 6, 7, 43, 80]
list.sort倒序-->[80, 43, 7, 6, 5, 4, 2, 1]

1.3 list.stream()排序


List<Integer> collect = list.stream().sorted().collect(Collectors.toList());
System.out.println("stream.sorted正序-->" + collect);
List<Integer> collect1 = list.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
System.out.println("stream.sorted倒序-->" + collect1);

结果:
stream.sorted正序-->[1, 2, 4, 5, 6, 7, 43, 80]
stream.sorted倒序-->[80, 43, 7, 6, 5, 4, 2, 1]

2、list<对象>

  • List<类> list = new ArrayList<>();


基础数据
List<PersonDto> personDtos = ListUtil.toList(
        new PersonDto(1, "张三", 174, 32),
        new PersonDto(4, "李四", 173, 23),
        new PersonDto(4, "赵六", 185, 20),
        new PersonDto(3, "王五", 192, 20),
        new PersonDto(5, "孙七", 169, 26)
);

2.1 单属性排序(升序)


  • list.stream().sorted(Comparator.comparing(类::属性一));



System.out.println("1.默认排序");
personDtos.forEach(System.out::println);
System.out.println("2.按年龄升序");
personDtos.stream().sorted(Comparator.comparing(PersonDto::getAge)).forEach(System.out::println);

结果:
1.默认排序
PersonDto{id=1, name='张三', tall=174, age=32}
PersonDto{id=4, name='李四', tall=173, age=23}
PersonDto{id=4, name='赵六', tall=185, age=20}
PersonDto{id=3, name='王五', tall=192, age=20}
PersonDto{id=5, name='孙七', tall=169, age=26}
2.按年龄升序
PersonDto{id=4, name='赵六', tall=185, age=20}
PersonDto{id=3, name='王五', tall=192, age=20}
PersonDto{id=4, name='李四', tall=173, age=23}
PersonDto{id=5, name='孙七', tall=169, age=26}
PersonDto{id=1, name='张三', tall=174, age=32}

2.2 单属性排序(降序)


  • list.stream().sorted(Comparator.comparing(类::属性一).reversed()); //先以属性一升序,而后对结果集进行属性一降序

  • list.stream().sorted(Comparator.comparing(类::属性一, Comparator.reverseOrder())); //以属性一降序



System.out.println("3.1 按年龄倒序 (先以年龄升序,而后对结果集进行年龄降序)");
personDtos.stream().sorted(Comparator.comparing(PersonDto::getAge).reversed()).forEach(System.out::println);
System.out.println("3.2 按年龄倒序 (先以年龄升降序)");
personDtos.stream().sorted(Comparator.comparing(PersonDto::getAge,Comparator.reverseOrder())).forEach(System.out::println);

结果:
3.1 按年龄倒序 (先以年龄升序,而后对结果集进行年龄降序)
PersonDto{id=1, name='张三', tall=174, age=32}
PersonDto{id=5, name='孙七', tall=169, age=26}
PersonDto{id=4, name='李四', tall=173, age=23}
PersonDto{id=4, name='赵六', tall=185, age=20}
PersonDto{id=3, name='王五', tall=192, age=20}
3.2 按年龄倒序 (先以年龄升降序)
PersonDto{id=1, name='张三', tall=174, age=32}
PersonDto{id=5, name='孙七', tall=169, age=26}
PersonDto{id=4, name='李四', tall=173, age=23}
PersonDto{id=4, name='赵六', tall=185, age=20}
PersonDto{id=3, name='王五', tall=192, age=20}

2.3 多属性排序(属性一升序,属性二升序)


  • list.stream().sorted(Comparator.comparing(类::属性一).thenComparing(类::属性二));//以类属性一升序 属性二升序



System.out.println("4.按学号升序、年龄升序");
personDtos
      .stream()
      .sorted(Comparator.comparingInt(PersonDto::getId)
            .thenComparingInt(PersonDto::getAge))
      .collect(Collectors.toList())
      .forEach(System.out::println);

结果:
4.按学号升序、年龄升序
PersonDto{id=1, name='张三', tall=174, age=32}
PersonDto{id=3, name='王五', tall=192, age=20}
PersonDto{id=4, name='赵六', tall=185, age=20}
PersonDto{id=4, name='李四', tall=173, age=23}
PersonDto{id=5, name='孙七', tall=169, age=26}

2.4 多属性排序(属性一降序,属性二降序)


  • list.stream().sorted(Comparator.comparing(类::属性一).reversed().thenComparing(类::属性二,Comparator.reverseOrder()));//先以属性一升序,升序结果进行属性一降序,再进行属性二降序

  • list.stream().sorted(Comparator.comparing(类::属性一).thenComparing(类::属性二).reversed());//先以属性一升序,进行属性二升序,再进行结果降序

  • list.stream().sorted(Comparator.comparing(类::属性一,Comparator.reverseOrder()).thenComparing(类::属性二,Comparator.reverseOrder()));//先以属性一降序,再进行属性二降序



System.out.println("5.1.按学号降序、年龄降序 (先以年龄升序,升序结果进行学号降序,再进行年龄降序)");
personDtos
      .stream()
      .sorted(Comparator.comparing(PersonDto::getId)
            .reversed()
            .thenComparing(PersonDto::getAge,Comparator.reverseOrder()))
      .collect(Collectors.toList())
      .forEach(System.out::println);

System.out.println("5.2.按学号降序、年龄降序 (先以年龄升序,再进行年龄升序,结果进行(学号&年龄)降序)");
personDtos
      .stream()
      .sorted(Comparator.comparingInt(PersonDto::getId)
            .thenComparingInt(PersonDto::getAge)
            .reversed())
      .collect(Collectors.toList())
      .forEach(System.out::println);

System.out.println("5.3.按学号降序、年龄降序 (先以学号降序,再进行年龄降序)");
personDtos
      .stream()
      .sorted(Comparator.comparing(PersonDto::getId,Comparator.reverseOrder())
            .thenComparing(PersonDto::getAge,Comparator.reverseOrder()))
      .collect(Collectors.toList())
      .forEach(System.out::println);

结果:
5.1.按学号降序、年龄降序 (先以年龄升序,升序结果进行学号降序,再进行年龄降序)
PersonDto{id=5, name='孙七', tall=169, age=26}
PersonDto{id=4, name='李四', tall=173, age=23}
PersonDto{id=4, name='赵六', tall=185, age=20}
PersonDto{id=3, name='王五', tall=192, age=20}
PersonDto{id=1, name='张三', tall=174, age=32}
5.2.按学号降序、年龄降序 (先以年龄升序,再进行年龄升序,结果进行(学号&年龄)降序)
PersonDto{id=5, name='孙七', tall=169, age=26}
PersonDto{id=4, name='李四', tall=173, age=23}
PersonDto{id=4, name='赵六', tall=185, age=20}
PersonDto{id=3, name='王五', tall=192, age=20}
PersonDto{id=1, name='张三', tall=174, age=32}
5.3.按学号降序、年龄降序 (先以学号降序,再进行年龄降序)
PersonDto{id=5, name='孙七', tall=169, age=26}
PersonDto{id=4, name='李四', tall=173, age=23}
PersonDto{id=4, name='赵六', tall=185, age=20}
PersonDto{id=3, name='王五', tall=192, age=20}
PersonDto{id=1, name='张三', tall=174, age=32}

2.5 多属性排序(属性一升序,属性二降序)


  • list.stream().sorted(Comparator.comparing(类::属性一).reversed().thenComparing(类::属性二).reversed());//先以属性一升序,升序结果进行属性一降序,再进行属性二升序,结果进行属性一降序属性二降序

  • list.stream().sorted(Comparator.comparing(类::属性一).thenComparing(类::属性二,Comparator.reverseOrder()));//先以属性一升序,再进行属性二降序



System.out.println("6.1 按学号升序、年龄降序 (先以学号升序,升序结果进行学号降序,再进行年龄升序,结果进行(学号&年龄)降序)");
personDtos
      .stream()
      .sorted(Comparator.comparing(PersonDto::getId).reversed()
            .thenComparing(PersonDto::getAge).reversed())
      .collect(Collectors.toList())
      .forEach(System.out::println);

System.out.println("6.2 按学号升序、年龄降序 (先以学号升序,再进行年龄降序)");
personDtos
      .stream()
      .sorted(Comparator.comparing(PersonDto::getId)
            .thenComparing(PersonDto::getAge,Comparator.reverseOrder()))
      .collect(Collectors.toList())
      .forEach(System.out::println);

结果:
6.1 按学号升序、年龄降序 (先以学号升序,升序结果进行学号降序,再进行年龄升序,结果进行(学号&年龄)降序)
PersonDto{id=1, name='张三', tall=174, age=32}
PersonDto{id=3, name='王五', tall=192, age=20}
PersonDto{id=4, name='李四', tall=173, age=23}
PersonDto{id=4, name='赵六', tall=185, age=20}
PersonDto{id=5, name='孙七', tall=169, age=26}
6.2 按学号升序、年龄降序 (先以学号升序,再进行年龄降序)
PersonDto{id=1, name='张三', tall=174, age=32}
PersonDto{id=3, name='王五', tall=192, age=20}
PersonDto{id=4, name='李四', tall=173, age=23}
PersonDto{id=4, name='赵六', tall=185, age=20}
PersonDto{id=5, name='孙七', tall=169, age=26}

2.6 多属性排序(属性一降序,属性二升序)


  • list.stream().sorted(Comparator.comparing(类::属性一).reversed().thenComparing(类::属性二));//先以属性一升序,升序结果进行属性一降序,再进行属性二升序

  • list.stream().sorted(Comparator.comparing(类::属性一,Comparator.reverseOrder()).thenComparing(类::属性二));//先以属性一降序,再进行属性二升序



System.out.println("7.1 按学号降序、年龄升序 (先以学号升序,升序结果进行学号降序,再进行年龄升序)");
personDtos
      .stream()
      .sorted(Comparator.comparing(PersonDto::getId)
            .reversed()
            .thenComparing(Comparator.comparing(PersonDto::getAge)))
      .collect(Collectors.toList())
      .forEach(System.out::println);

System.out.println("7.2 按学号降序、年龄升序 (以学号学号降序,再进行年龄升序)");
personDtos
      .stream()
      .sorted(Comparator.comparing(PersonDto::getId,Comparator.reverseOrder())
            .thenComparing(Comparator.comparing(PersonDto::getAge))
            .thenComparing(Comparator.comparing(PersonDto::getTall)))
      .collect(Collectors.toList())
      .forEach(System.out::println);
结果:
7.1 按学号降序、年龄升序 (先以学号升序,升序结果进行学号降序,再进行年龄升序)
PersonDto{id=5, name='孙七', tall=169, age=26}
PersonDto{id=4, name='赵六', tall=185, age=20}
PersonDto{id=4, name='李四', tall=173, age=23}
PersonDto{id=3, name='王五', tall=192, age=20}
PersonDto{id=1, name='张三', tall=174, age=32}
7.2 按学号降序、年龄升序 (以学号学号降序,再进行年龄升序)
PersonDto{id=5, name='孙七', tall=169, age=26}
PersonDto{id=4, name='赵六', tall=185, age=20}
PersonDto{id=4, name='李四', tall=173, age=23}
PersonDto{id=3, name='王五', tall=192, age=20}
PersonDto{id=1, name='张三', tall=174, age=32}

 文章来源地址https://www.toymoban.com/news/detail-603315.html

3、重点关注(倒序的两种写法)


!!!两种排序完全不同:1是获得排序结果后再排序,2是直接进行排序!!!


1, Comparator.comparing(类::属性一).reversed();

2, Comparator.comparing(类::属性一,Comparator.reverseOrder());

 

 

 

到了这里,关于集合list排序,普通排序,stream(单属性、多属性)排序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Stream流 - 两个list集合对象属性的合并、对象属性值运算

    📅 合并两个 list<map>, 并将 userId 相同的所有属性合并到一个 map 中 list1中对象的属性:userId、userName list2中对象的属性:userId、gender、age 📌 最终总集合中对象的属性:userId、userName、gender、age 运行结果: 结果可见,userId 相同的所有属性合并到集合 list1中。 📅 合并两个

    2024年02月06日
    浏览(123)
  • JAVA8中list.stream()的一些简单使用

    为函数式编程而生。对stream的任何修改都不会修改背后的数据源,比如对stream执行过滤操作并不会删除被过滤的元素,而是会产生一个不包含被过滤元素的新stream。 stream上的操作并不会立即执行,只有等到用户真正需要结果的时候才会执行。 stream只能被使用一次,一旦遍历

    2024年02月03日
    浏览(43)
  • Java8特性,Stream流的使用,收集成为map集合

    Java 8引入了Stream API,这是Java集合操作的一个重大改进。Stream API提供了一种高效且易于使用的处理数据的方式。 Stream是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。注意:Stream自己不会存储元素,它不会改变源对象,反而它的操作会返回一个全新的Strea

    2024年04月22日
    浏览(79)
  • Java8使用Stream流实现List列表简单使用

       目录 1.forEach() 2.filter(T - boolean) 3.findAny()和findFirst() 4.map(T - R) 和flatMap(T - stream) 5.distinct() 去重 6.limit(long n)和skip(long n)  7.anyMatch(T - boolean) 8.allMatch(T - boolean) 9.noneMatch(T - boolean) Java8提供了Stream(流)处理集合的关键抽象概念,Stream 使用一种类似用 SQL 语句从数据库查询数

    2023年04月27日
    浏览(90)
  • Java8 - 将 List 集合转为 Map

    1. 将List转为Map:key=userId, value=name 输出: 2. 将List转为Map:key=userId, value=User对象 输出: 3. 重复的 key 处理 如果出现相同的key,那么会抛出重复key的异常,比如我们将userId为3的修改为2,则会和第二个用户冲突: 抛出异常: Collectors.toMap支持第三个参数,对重复值进行选取:

    2024年02月08日
    浏览(94)
  • Java8 list多属性去重

    大家好,我是三叔,很高兴这期又和大家见面了,一个奋斗在互联网的打工人。 在 Java 开发中,我们经常会面临对 List 中的对象属性去重的需求。然而,当需要根据多个属性来进行去重时,情况会稍微复杂一些。本篇博客将深入探讨如何使用 Java 8 的 Stream API 来实现 List 多属

    2024年02月14日
    浏览(87)
  • Java8 stream、List forEach 遍历对象 List 对某一字段重新赋值

    Java8 stream、List forEach 遍历对象 List 对某一字段重新赋值 经常会需要遍历对象 List 对某一字段重新赋值,使用 Java8 stream 或者 List forEach 操作实现非常便捷。 一、Java8 stream 操作 示例代码如下: 二、List forEach 操作 示例代码如下: 将 Object 替换为需要提取的对象即可。 遍历对象

    2024年02月16日
    浏览(51)
  • Java8的stream之groupingBy()分组排序

    groupingBy()是Stream API中最强大的收集器Collector之一,提供与SQL的GROUP BY子句类似的功能。 需要指定一个属性才能使用,通过该属性执行分组。我们通过提供功能接口的实现来实现这一点 - 通常通过传递lambda表达式。 TreeMap默认按照key升序排序,collectPlan.descendingMap()可以进行降序排

    2024年02月12日
    浏览(38)
  • Java8 List集合如何指定打印分隔符

    背景 无论是在学习还是日常的应用开发过程中,我们经常会需要使用分隔符将 List 集合打印出来。 如下所示: 执行结果如下: 如果我们想在打印的时候不打印 [] ,然后将分隔符换成 、 顿号,应该怎么操作呢? 其实有两种方法可以实现: 方法一:String.join(推荐) String

    2024年02月10日
    浏览(51)
  • 使用stream流对List<Map<String, Object>>集合根据value进行排序

    第一步:初始化数据 ========================================================= 第二步:开始排序 ① 根据数字排序 打印结果 ② 根据字符串排序 打印结果 ③ 根据时间类型排序 打印结果 总结:String类型是万金油的排序方式,基本都可以用!!! 补充一个排序方法 打印结果 就这样。。。

    2024年02月16日
    浏览(50)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包