首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【集合排序排序问题】

【集合排序排序问题】

作者头像
贺公子之数据科学与艺术
发布2025-08-29 09:42:44
发布2025-08-29 09:42:44
13500
代码可运行
举报
运行总次数:0
代码可运行
在这里插入图片描述
在这里插入图片描述

在JDK8中,集合的排序可以使用Stream API和lambda表达式来实现。

以下是一些常见的排序问题示例:

1. 对整数列表进行升序排序:

代码语言:javascript
代码运行次数:0
运行
复制
List<Integer> numbers = Arrays.asList(5, 3, 8, 2, 1);

List<Integer> sortedNumbers = numbers.stream()
        .sorted()
        .collect(Collectors.toList());

System.out.println(sortedNumbers);  // 输出:[1, 2, 3, 5, 8]

2. 对字符串列表按字母顺序进行排序:

代码语言:javascript
代码运行次数:0
运行
复制
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");

List<String> sortedNames = names.stream()
        .sorted()
        .collect(Collectors.toList());

System.out.println(sortedNames);  // 输出:[Alice, Bob, Charlie, David]

3. 对自定义对象列表按属性进行排序:

代码语言:javascript
代码运行次数:0
运行
复制
class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    @Override
    public String toString() {
        return name + " (" + age + " years old)";
    }
}

List<Person> people = Arrays.asList(
        new Person("Alice", 25),
        new Person("Bob", 30),
        new Person("Charlie", 20),
        new Person("David", 35)
);

List<Person> sortedPeople = people.stream()
        .sorted(Comparator.comparing(Person::getAge))
        .collect(Collectors.toList());

System.out.println(sortedPeople);  // 输出:[Charlie (20 years old), Alice (25 years old), Bob (30 years old), David (35 years old)]

在上述示例中,使用stream()方法将集合转换为流,然后使用sorted()方法进行排序。对于自定义对象,可以使用Comparator.comparing()方法指定按照哪个属性进行排序。最后使用collect()方法将排序后的结果收集到一个新的列表中。

集合String类型排序问题

由于getSex属性值为两位数和三位数导致的。如果您希望两位数在排序时被视为大于三位数,可以尝试以下方法:

  1. 自定义比较器来处理两位数和三位数的排序逻辑。请注意,此方法假设getSex属性值始终为整数类型。
代码语言:javascript
代码运行次数:0
运行
复制
Comparator<UserDTO> tierComparator = Comparator.comparing((UserDTOdto) -> Integer.parseInt(dto.getSex())).reversed();
Comparator<UserDTO> sortComparator = Comparator.comparing(UserDTO::getSort);

List<UserDTO> listReversedData = listData.stream()
    .sorted(tierComparator.thenComparing(sortComparator))
    .collect(Collectors.toList());

bayInfoDTO.setUserDTOList(listReversedData);
  1. 如果getSex属性值是字符串类型,且可以预期只包含两位数或三位数,您可以尝试以下方法。此方法会将getSex属性值填充到固定长度的字符串,然后进行比较。
代码语言:javascript
代码运行次数:0
运行
复制
Comparator<UserDTO> tierComparator = Comparator.comparing((UserDTO dto) -> String.format("%3s", dto.getSex())).reversed();
Comparator<UserDTO> sortComparator = Comparator.comparing(UserDTO::getSort);

List<UserDTO> listReversedData = listData.stream()
    .sorted(tierComparator.thenComparing(sortComparator))
    .collect(Collectors.toList());

bayInfoDTO.setUserDTOList(listReversedData);

以上解决方案可以根据您的具体需求进行调整。请确保dataTypeComparator和sortComparator都按照预期的逻辑进行排序。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-08-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 在JDK8中,集合的排序可以使用Stream API和lambda表达式来实现。
  • 1. 对整数列表进行升序排序:
  • 2. 对字符串列表按字母顺序进行排序:
  • 3. 对自定义对象列表按属性进行排序:
  • 集合String类型排序问题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档