Stream sorted的使用以及注意事项

本文详细介绍了Java Stream的sorted方法,包括自然排序、倒序排序、多次排序以及自定义排序(利用Lambda表达式)。通过实例展示了如何在排序后获取特定字段,如姓名,并将排序后的结果转换为集合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.sorted作用

返回由此流的元素组成的流,按照自然顺序排序。简单的来说就是排序,可以自定义排序方法,也可以使用Comparator的compring方法按指定的数据排序。

2.sorted使用

2.1自然排序

List<Integer> list2 = new ArrayList<Integer>();
list2.add(15);
list2.add(10);
list2.add(5);
Object[] object = list2.stream().sorted().toArray();
        for (Object p:object) {
            System.out.println(p);
        }

结果:
在这里插入图片描述

2.2自然排序的倒序

//按照年龄排序的倒序
List<Person> list = new ArrayList<Person>();
        list.add(new Person(21,"张三"));
        list.add(new Person(14,"王二"));
        list.add(new Person(28,"李四"));
        list.add(new Person(11,"王路飞"));
        Object[] object = list.stream().sorted(Comparator.comparing(Person::getAge).reversed()).toArray();
        for (Object p:object) {
            System.out.println(p);
        }

结果
在这里插入图片描述

2.3多次排序

先年龄排序,再按姓名(都是升序)

Object[] object = list.stream().sorted(Comparator.comparing(Person::getAge).thenComparing(Person::getName)).toArray();

结果
在这里插入图片描述
先按年龄降序,再按姓名升序

Object[] object = list.stream().sorted(Comparator.comparing(Person::getAge).reversed().thenComparing(Person::getName)).toArray();
        for (Object p:object) {
            System.out.println(p);
        }

结果
在这里插入图片描述

2.4自定义排序(用到lamda表达式)

年龄升序

Object[] object = list.stream().sorted((o1, o2) -> {
            int o1Age = o1.getAge();
            int o2Age = o2.getAge();
            return o1Age-o2Age;
        }).toArray();

结果
在这里插入图片描述

3.排序后只想要姓名

排序完成后利用stream的map()方法

Object[] object = list.stream().sorted((o1, o2) -> {
            int o1Age = o1.getAge();
            int o2Age = o2.getAge();
            return o1Age-o2Age;
        }).map(Person::getName).toArray();
        for (Object p:object) {
            System.out.println(p);
        }

结果
在这里插入图片描述

4.排序后转集合

以上方法全部转换成的数组
转换集合:

List<Person> list1 = list.stream().sorted((o1, o2) -> {
            int o1Age = o1.getAge();
            int o2Age = o2.getAge();
            return o1Age-o2Age;
        }).collect(Collectors.toList());
        System.out.println(list1);

结果:
在这里插入图片描述
转换成集合的话,若想使用map匹配想要的数据,那么List<>里的泛型要和匹配后的数据类型一致,例如我想要姓名,那么泛型里传String,当然也可以省略不写泛型,可以接受任何类型的数据

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值