在Java中实现集合排序

打印 上一主题 下一主题

主题 845|帖子 845|积分 2535

利用字面量的方式创建一个集合

  1. //使用字面量的方式初始化一个List集合
  2.         List<User> userList = Arrays.asList(
  3.                 new User("小A",5),
  4.                 new User("小鑫",18),
  5.                 new User("小昌",8),
  6.                 new User("小鑫",8));
复制代码
注意:利用Arrays.asList() api方法创建出来的集合他是一个固定长度的集合,不能进行集合的添加和删除,否则会抛出 UnsupportedOperationException异常,假如你想要添加或者删除集合元素必须利用如下方式创建集合
  1. List<User> studentList = new ArrayList<>(
  2.         Arrays.asList(new User("杨鑫"), new User("小咪"), new User("科雷"),new User("张宝"))
  3.         );
复制代码
1、实现Comparable接口,实现集合排序

1.1、实体类实现Comparable接口

  1. package com.maochang.tenancytest.domain;
  2. import lombok.AllArgsConstructor;
  3. import lombok.Data;
  4. import lombok.NoArgsConstructor;
  5. import lombok.ToString;
  6. @AllArgsConstructor
  7. @NoArgsConstructor
  8. @ToString
  9. @Data
  10. public class User  implements Comparable<User>{
  11.     private String name;
  12.     private Integer age;
  13.     /**
  14.      * 自定义比较规格
  15.      * @param o the object to be compared.
  16.      * @return
  17.      */
  18.     @Override
  19.     public int compareTo(User o) { //参数对象和当前对象进行比较
  20.         //进行名称比较
  21.         int flag = this.name.compareTo(o.name);
  22.         //代表姓名相同
  23.         if(flag==0){
  24.             //A-B 如果 正数 A>B   负数A<B
  25.             flag=this.age-o.age;
  26.         }
  27.         //返回比较结果
  28.         return flag;
  29.     }
  30. }
复制代码
1.2、利用集合工具类Collections 进行排序

  1. Collections.sort(userList);
复制代码
1.3、测试方法

  1.   @Test    void test01() {        //使用字面量的方式初始化一个List集合
  2.         List<User> userList = Arrays.asList(
  3.                 new User("小A",5),
  4.                 new User("小鑫",18),
  5.                 new User("小昌",8),
  6.                 new User("小鑫",8));
  7.         //集合工具类-排序        System.out.println("排序前:" + userList);        System.out.println("=================开始排序==================");        Collections.sort(userList);
  8.         System.out.println("排序后:" + userList);    }
复制代码
2、利用Comparator 比较器实现集合对象排序

  1. public class User{
  2.   private String name;
  3.   private Integer age;
  4. }
  5. Collections.sort(userList,
  6.                 (o1, o2) -> {
  7.                     int flag = o1.getName().compareTo(o2.getName());
  8.                     if(flag == 0){
  9.                         flag = o1.getAge() - o2.getAge();
  10.                     }
  11.                     return flag ;
  12.                 }
  13.         );
复制代码
简写优化写法
  1. Collections.sort(userList,
  2.                 Comparator.comparing(User::getName).thenComparingInt(User::getAge)
  3.         );
复制代码
3、利用Stream进行集合对象排序

  1. public class User{
  2.   private String name;
  3.   private Integer age;
  4. }
  5. //如果实现了Comparable 接口
  6. List<User> collect = userList.stream().sorted().collect(Collectors.toList());
  7. //如果没有实现 Comparable 接口
  8. userList.stream().sorted((o1, o2) -> {
  9.             int flag = o1.getName().compareTo(o2.getName());
  10.             if(flag == 0){
  11.                 flag = o1.getAge() - o2.getAge();
  12.             }
  13.             return flag ;
  14.         });
  15. //没有实现的简写方式
  16. userList.stream().sorted(Comparator.comparing(User::getName).thenComparingInt(User::getAge));        
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

用户云卷云舒

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表