集合排序排序问题目录

  • 在JDK8中,集合的排序可以使用Stream API和lambda表达式来实现。
  • 1. 对整数列表进行升序排序:
  • 2. 对字符串列表按字母顺序进行排序:
  • 3. 对自定义对象列表按属性进行排序:
  • 集合String类型排序问题



【集合排序排序问题】_mybatis

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

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

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

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. 对字符串列表按字母顺序进行排序:

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. 对自定义对象列表按属性进行排序:

class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
         = 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属性值始终为整数类型。
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属性值填充到固定长度的字符串,然后进行比较。
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都按照预期的逻辑进行排序。