Java8-Stream流操作List排序(完整实例讲解)

废话少说,直接上代码。

一个学生类的实体类

ps:使用IDEA的同学,快捷键[Alt+Insert],可以一键生成对应的set/get/tostring/构造方法。

public class Student {
    private Long id;
    private String name;
    private int age;
    private Double height;

    public Student(Long id, String name, int age, Double height) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.height = height;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

    public Double getHeight() {
        return height;
    }

    public void setHeight(Double height) {
        this.height = height;
    }

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

然后我们测试下三种排序方式:

  • 按照id升序排列
  • 按照id逆序排列
  • 按照age排序,然后按照height排序
public class ListStreamSortTest {
    public static void main(String[] args) {
        // 一个集合中放入4个学生对象
        List<Student> list = new ArrayList<>();
        list.add(new Student(10002L, "ZhangSan", 19, 175.2));
        list.add(new Student(10003L, "LiSi", 18, 180.1));
        list.add(new Student(10004L, "Peter", 19, 170.8));
        list.add(new Student(10001L, "KangKang", 18, 167.4));
        // 打印默认顺序
        System.out.println("默认顺序:");
        list.stream().forEach(System.out::println);

        // 按照id排序
        System.out.println("id升序:");
        list.stream().sorted(Comparator.comparing(Student::getId))
                .forEach(System.out::println);

        // 按照id逆序排列
        System.out.println("id逆序:");
        list.stream().sorted(Comparator.comparing(Student::getId).reversed())
                .forEach(System.out::println);

        // 按照年龄排序,再按照升高排序
        System.out.println("age和height排序:");
        list.stream().sorted(Comparator.comparing(Student::getAge).thenComparing(Student::getHeight))
                .forEach(System.out::println);
    }
}

执行结果:

默认顺序:
Student{id=10002, name='ZhangSan', age=19, height=175.2}
Student{id=10003, name='LiSi', age=18, height=180.1}
Student{id=10004, name='Peter', age=19, height=170.8}
Student{id=10001, name='KangKang', age=18, height=167.4}
id升序:
Student{id=10001, name='KangKang', age=18, height=167.4}
Student{id=10002, name='ZhangSan', age=19, height=175.2}
Student{id=10003, name='LiSi', age=18, height=180.1}
Student{id=10004, name='Peter', age=19, height=170.8}
id逆序:
Student{id=10004, name='Peter', age=19, height=170.8}
Student{id=10003, name='LiSi', age=18, height=180.1}
Student{id=10002, name='ZhangSan', age=19, height=175.2}
Student{id=10001, name='KangKang', age=18, height=167.4}
age和height排序:
Student{id=10001, name='KangKang', age=18, height=167.4}
Student{id=10003, name='LiSi', age=18, height=180.1}
Student{id=10004, name='Peter', age=19, height=170.8}
Student{id=10002, name='ZhangSan', age=19, height=175.2}


沪漂程序员。 坚持写博客,如果觉得还可以的话,给个小星星哦,你的支持就是我创作的动力。

个人微信公众号:“Java尖子生”,阅读更多干货。
关注公众号,领取学习、面试资料。加技术讨论群。


阅读更多我的相关内容
Java8 Lambda表达式 和 函数式编程 原理详解
Java8方法引用,示例讲解
Java8-默认方法和默认静态方法
Java8-Stream流操作List排序(完整实例讲解)

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: Java 8 中的 Stream API 提供了一种使用函数式编程风格将 List 排序的方法。你可以使用 sorted 方法对 List 进行排序,例如: ``` List<Integer> numbers = Arrays.asList(3, 2, 1, 4, 5); numbers.stream().sorted().forEach(System.out::println); ``` 也可以提供自定义的比较器: ``` List<Integer> numbers = Arrays.asList(3, 2, 1, 4, 5); numbers.stream().sorted((a, b) -> b - a).forEach(System.out::println); ``` ### 回答2: Java8中引入了Stream API,它为我们提供了一种更简便、高效的方法来处理集合中的数据。Stream API可以让我们以一种更声明式的方式来编写代码,其中包括对数据的操作,如过滤、映射、归约和排序。 在Stream API中,排序操作非常简单,可以用于对任何实现了java.util.Comparator接口的对象进行排序。对于集合List,我们可以使用Stream API对其进行排序操作。 我们可以使用Streamsorted()方法对List进行排序,并传入一个Comparator对象来指定排序规则。下面是一个例子: List<Integer> list = Arrays.asList(5, 2, 8, 6, 3, 1); List<Integer> sortedList = list.stream() .sorted((a, b) -> a.compareTo(b)) .collect(Collectors.toList()); 在这个例子中,我们将List转换为Stream,然后使用sorted()方法进行排序,传入一个Comparator对象(此处使用的是Lambda表达式),最后使用collect()方法将Stream转换回List。 如果希望按照对象的某一属性进行排序,我们可以使用Comparator.comparing()方法来创建一个Comparator对象。例如,我们要对一个List中的Person对象按照年龄进行排序,可以使用以下代码: List<Person> list = Arrays.asList( new Person("Tom", 22), new Person("Alice", 18), new Person("Bob", 30), new Person("David", 25) ); List<Person> sortedList = list.stream() .sorted(Comparator.comparing(Person::getAge)) .collect(Collectors.toList()); 在这个例子中,我们先创建了一个包含Person对象的List,然后使用Stream API对其进行排序。我们使用Comparator.comparing()方法传入一个函数,该函数用于提取每个Person对象的年龄属性。最后,我们将Stream转换为List以获得排好序的结果。 总之,Stream API提供了一种简便、高效的方式来对集合进行排序操作。我们可以使用sorted()方法对任何实现了Comparator接口的对象进行排序,或使用Comparator.comparing()方法来按照对象的某一属性进行排序。 ### 回答3: Java8引入了Stream API,其提供了一个全新的处理集合数据的方式。Stream API可以通过管道操作(类似于UNIX式处理命令)来处理集合中的数据,从而实现了一些新的数据处理策略。StreamJava集合框架库的升级版本,使用lambda表达式简化了代码。 对List进行排序,可以使用Streamsorted方法。在Java8中,List提供了一个stream()方法,该方法返回一个Stream实例。我们可以通过这个实例进行排序和其他操作。 例如,我们有一个存储整数的ListList<Integer> list = Arrays.asList(3, 7, 2, 4, 9, 1); 我们可以使用stream()方法从这个列表中获得一个,并且使用sorted()方法将其排序List<Integer> sortedList = list.stream().sorted().collect(Collectors.toList()); 排序后的List将是这样的: [1, 2, 3, 4, 7, 9] 除了使用默认排序顺序,我们也可以在sorted方法中传入Comparator来指定自定义排序顺序。例如,我们可以使用下面的代码以降序排列ListList<Integer> reverseSortedList = list.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList()); 这样,就可以获得一个降序排列的List了: [9, 7, 4, 3, 2, 1] 最后,在处理大量数据时,我们可以使用parallelStream()方法来获得并行,并使用sorted()方法对其进行排序以提高性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值