美文网首页Java进阶之路读书
掌握这5种排序写法,便可应对任意场景

掌握这5种排序写法,便可应对任意场景

作者: 狂徒_张三 | 来源:发表于2021-12-06 15:28 被阅读0次

推荐:前牛客网明星算法讲师——左程云亲授:算法与数据结构大厂面试最优解(附程序员代码面试指南第2版)

排序在日常中用到的挺多的,总的来说排序就下面 5 种,其他的都是下面的变种,掌握之后,其他各种排序都可应对自如。

1、普通类型升序

如下代码,列举了 String、Integer 类型集合升序,其他类型:Long、Double、Float、Byte 类似

//正序
@Test
public void test1() {
    //String类型升序
    List<String> stringList = Arrays.asList("5", "2", "4", "3", "1");
    //排序后
    List<String> stringListSorted = stringList.stream().
            sorted(String::compareTo).
            collect(Collectors.toList());
    stringListSorted.forEach(System.out::println);

    System.out.println("----------------------");

    //Integer类型升序
    List<Integer> intList = Arrays.asList(5, 2, 4, 3, 1);
    //排序后
    List<Integer> intListSorted = intList.stream().
            sorted(Integer::compareTo).
            collect(Collectors.toList());
    intListSorted.forEach(System.out::println);
}

输出

1
2
3
4
5
----------------------
1
2
3
4
5

2、普通类型降序

如下代码,列举了 String、Integer 类型集合降序,其他类型:Long、Double、Float、Byte 类似

//降序
@Test
public void test2() {
    //String类型降序
    List<String> stringList = Arrays.asList("5", "2", "4", "3", "1");
    //排序后
    List<String> stringListSorted = stringList.stream().
        sorted(String::compareTo).
        sorted(Comparator.reverseOrder()).
        collect(Collectors.toList());
    stringListSorted.forEach(System.out::println);

    System.out.println("----------------------");

    //Integer类型降序
    List<Integer> intList = Arrays.asList(5, 2, 4, 3, 1);
    //排序后
    List<Integer> intListSorted = intList.stream().
        sorted(Integer::compareTo).
        sorted(Comparator.reverseOrder()).
        collect(Collectors.toList());
    intListSorted.forEach(System.out::println);
}

输出

5
4
3
2
1
----------------------
5
4
3
2
1

3、Java 对象单字段升序

按照用户年龄升序排序,先来个用户类

public static class User{
    private String name;
    private Integer age;

    public User(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

按照 age 升序,代码如下

@Test
public void test3(){
    List<User> userList = Arrays.asList(
        new User("1001",30),
        new User("1002",20),
        new User("1003",40),
        new User("1004",20));
    List<User> userListSorted = userList.stream().
        sorted(Comparator.comparing(User::getAge)).
        collect(Collectors.toList());
    userListSorted.stream().forEach(System.out::println);
}

运行输出

User{name='1002', age=20}
User{name='1004', age=20}
User{name='1001', age=30}
User{name='1003', age=40}

5、Java 对象单字段降序

按照 age 降序,代码如下

@Test
public void test4(){
    List<User> userList = Arrays.asList(
            new User("1001",30),
            new User("1002",20),
            new User("1003",40),
            new User("1004",20));
    List<User> userListSorted = userList.stream().
            sorted(Comparator.comparing(User::getAge).reversed()).
            collect(Collectors.toList());
    userListSorted.stream().forEach(System.out::println);
}

运行输出

User{name='1003', age=40}
User{name='1001', age=30}
User{name='1002', age=20}
User{name='1004', age=20}

6、Java 对象多字段排序

age 升序,name 降序

@Test
public void test5() {
    List<User> userList = Arrays.asList(
            new User("1001", 30),
            new User("1002", 20),
            new User("1003", 40),
            new User("1004", 20));
    List<User> userListSorted = userList.stream().
            sorted(Comparator.comparing(User::getAge).
                    thenComparing(Comparator.comparing(User::getName).reversed())).
            collect(Collectors.toList());
    userListSorted.stream().forEach(System.out::println);
}

运行输出

User{name='1004', age=20}
User{name='1002', age=20}
User{name='1001', age=30}
User{name='1003', age=40}

7、完整代码

import org.junit.jupiter.api.Test;

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

public class SortTest {
    //正序
    @Test
    public void test1() {
        //String类型升序
        List<String> stringList = Arrays.asList("5", "2", "4", "3", "1");
        //排序后
        List<String> stringListSorted = stringList.stream().
                sorted(String::compareTo).
                collect(Collectors.toList());
        stringListSorted.forEach(System.out::println);

        System.out.println("----------------------");

        //Integer类型升序
        List<Integer> intList = Arrays.asList(5, 2, 4, 3, 1);
        //排序后
        List<Integer> intListSorted = intList.stream().
                sorted(Integer::compareTo).
                collect(Collectors.toList());
        intListSorted.forEach(System.out::println);
    }

    //降序
    @Test
    public void test2() {
        //String类型降序
        List<String> stringList = Arrays.asList("5", "2", "4", "3", "1");
        //排序后
        List<String> stringListSorted = stringList.stream().
                sorted(String::compareTo).
                sorted(Comparator.reverseOrder()).
                collect(Collectors.toList());
        stringListSorted.forEach(System.out::println);

        System.out.println("----------------------");

        //Integer类型降序
        List<Integer> intList = Arrays.asList(5, 2, 4, 3, 1);
        //排序后
        List<Integer> intListSorted = intList.stream().
                sorted(Integer::compareTo).
                sorted(Comparator.reverseOrder()).
                collect(Collectors.toList());
        intListSorted.forEach(System.out::println);
    }

    //age 升序
    @Test
    public void test3() {
        List<User> userList = Arrays.asList(
                new User("1001", 30),
                new User("1002", 20),
                new User("1003", 40),
                new User("1004", 20));
        List<User> userListSorted = userList.stream().
                sorted(Comparator.comparing(User::getAge)).
                collect(Collectors.toList());
        userListSorted.stream().forEach(System.out::println);
    }

    //age 降序
    @Test
    public void test4() {
        List<User> userList = Arrays.asList(
                new User("1001", 30),
                new User("1002", 20),
                new User("1003", 40),
                new User("1004", 20));
        List<User> userListSorted = userList.stream().
                sorted(Comparator.comparing(User::getAge).reversed()).
                collect(Collectors.toList());
        userListSorted.stream().forEach(System.out::println);
    }

    //age升序 name降序
    @Test
    public void test5() {
        List<User> userList = Arrays.asList(
                new User("1001", 30),
                new User("1002", 20),
                new User("1003", 40),
                new User("1004", 20));
        List<User> userListSorted = userList.stream().
                sorted(Comparator.comparing(User::getAge).
                        thenComparing(Comparator.comparing(User::getName).reversed())).
                collect(Collectors.toList());
        userListSorted.stream().forEach(System.out::println);
    }


    public static class User {
        private String name;
        private Integer age;

        public User(String name, Integer age) {
            this.name = name;
            this.age = age;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public Integer getAge() {
            return age;
        }

        public void setAge(Integer age) {
            this.age = age;
        }

        @Override
        public String toString() {
            return "User{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }
}

相关文章

  • 掌握这5种排序写法,便可应对任意场景

    推荐:前牛客网明星算法讲师——左程云亲授:算法与数据结构大厂面试最优解(附程序员代码面试指南第2版)[https:...

  • 怎样和孩子更好的沟通?

    掌握3个沟通的原则 生活中有无数个具体的场景需要我们去应对。但掌握好这3个沟通的原则,我们和孩子沟通起来,就简单有...

  • antd 表格排序sort的坑

    正确的排序写法 错误的写法

  • C++ String的常见操作

    如何任意排序String String删除操作任意字符 任意排序 排序我们可以用标准库给我们提供好的算法,或者也可...

  • Excel P4 单元格格式设置

    一, 排序 1、简单排序: 点中要排序列的任意单元格, 点升序/降序 2、多条件排序:点中要排序列的任意单元格, ...

  • js:冒泡排序

    冒泡排序的写法: 封装一个冒泡排序:

  • 算法

    冒泡排序、选择排序 swift 写法 OC 写法 斐波那契算法【后一项等于前两项之和】

  • 排序算法

    JS里排序算法的写法:

  • 2020-03-20flutter 交互通信

    把这几天了解学习的知识汇总了一下,掌握flutter以下几种方式即可应对各种场景了。 一、监听回调 场景,A页面实...

  • Java实现各种常用的排序算法

    Java实现各种常用的排序算法,包括:冒泡排序、插入排序、二分排序、选择排序、希尔排序、堆排序、快速排序(两种写法...

网友评论

    本文标题:掌握这5种排序写法,便可应对任意场景

    本文链接:https://www.haomeiwen.com/subject/bmgvxrtx.html