【java】基本类型、自定义类型set集合的多种排序方式:lambda表达式排序、JDK API、Java8 stream流

一、set的特性

Set是个无序、不可重复的集合接口;有三个实现类: HashSet、TreeSet、LinkedHashSet;
Set的特性是有序不重复,Jdk中使用了HashMap的Key作为Set的容器。

二、包装类型set的排序方式

1.方法一:新建TreeSet

        Set<String> set = new HashSet<>();
        set.add("1");
        set.add("2");
        set.add("5");
        set.add("4");
        set.add("3");
        System.out.println(set.toString());
        Set<String> sortSet = new TreeSet<String>(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
            	// 降序排列  (升序是将o1与o2交换下位置)
                return o2.compareTo(o1);
            }
        });
        sortSet.addAll(set);
        System.out.println(sortSet.toString());

在这里插入图片描述

2.方法二:新建TreeSet的同时,用lambda表达式排序

      Set<String> set = new HashSet<>();
        set.add("2");
        set.add("1");
        set.add("5");
        set.add("3");
        set.add("4");
        System.out.println(set.toString());
        Set<String> sortSet = new TreeSet<String>((o1, o2) -> o2.compareTo(o1));
        sortSet.addAll(set);
        System.out.println(sortSet.toString());
 

在这里插入图片描述

3.方法三:JDK API

  Set<String> set = new HashSet<>();
        set.add("1");
        set.add("2");
        set.add("3");
        set.add("5");
        set.add("4");
        System.out.println(set.toString());
 
        Set<String> sortSet = new TreeSet<String>(Comparator.reverseOrder());
        sortSet.addAll(set);
        System.out.println(sortSet.toString());

在这里插入图片描述

4.方法四:Java8 stream 流

    Set<String> set = new HashSet<>();
        set.add("1");
        set.add("2");
        set.add("3");
        set.add("4");
        set.add("5");
        System.out.println(set.toString());
        //这里后续用有序的list处理即可,因为流中进行了倒序处理,收集成set后会重排
        List<String> collect = set.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
        System.out.println(collect);

在这里插入图片描述

三、自定义类型set排序

现有set集合如下:


    public class UserInfo{
        private int id;
        private String userName;
        private Integer age;
        private String userCode;
    }

    @Test
    public void test(){

          UserInfo user1 = new UserInfo();
        user1.id = 1;
        user1.userName = "hoshi";
        user1.age = 27;
        UserInfo user2 = new UserInfo();
        user2.id = 2;
        user2.userName = "dk";
        user2.age = 26;
        UserInfo user3 = new UserInfo();
        user3.id = 3;
        user3.userName = "SEUNGKWAN";
        user3.age = 25;
        UserInfo user4 = new UserInfo();
        user4.id = 4;
        user4.userName = "dino";
        user4.age = 24;

        Set<UserInfo> userSet = new HashSet() {  // 这个括号用来创建匿名内部类
            {  // 这个括号表示是匿名内部类的实例初始化块
                add(user1);
                add(user2);
                add(user3);
                add(user4);
            }
        };

        for(UserInfo user : userSet){
            System.out.println("id: "+user.id + ", \tuserName: "+user.userName + ", \t age: " + user.age);
        }     
    }

在这里插入图片描述

1.方法一:TreeSet

 Set<UserInfo> sortSet = new TreeSet<UserInfo>((o1, o2) -> o2.age.compareTo(o1.age));
        sortSet.addAll(userSet);

        for(UserInfo user : sortSet){
            System.out.println("id: "+user.id + ", \tuserName: "+user.userName + ", \t age: " + user.age);
        }

在这里插入图片描述

2.通过Java8 stream 流 排序。

        List<UserInfo> collect = userSet.stream().sorted(Comparator.comparing(p -> p.age)).collect(Collectors.toList());
		System.out.println("\n按age从小到大排序后:");
        for(UserInfo user : collect){
            System.out.println("id: "+user.id + ", \tuserName: "+user.userName + ", \t age: " + user.age);
        }

在这里插入图片描述

“冒泡 咕噜咕噜”
o(〃'▽'〃)o

在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值