精华内容
下载资源
问答
  • 通过list对象属性进行比较排序的通用工具类
    • 这里继续说有关List对象利用Sort方法进行排序,在java开发中我们经常会使用List进行排序,上篇说到可以每次根据需求编写实现Collections.sort(list, new Comparator() {}) 。然而对于经常通过利用实体类的属性进行比较排序,每次重复写这样的实现很麻烦,下面介绍通用的排序实现。

    • 实体类A

      /** 
       *  
    实体类A
       */
    public class A{  
        public A( String name, int num) {  
            this.name = name;  
            this.num= num;  
        }  
        private String name;  
        private int num; 
    
        public String getName() {  
             return name;  
        }  
    
      public void setName(String name) {  
             this.name= name;    
        }  
       public int getNum() {       
             return num;  
        }  
        public void setNum(int num) {  
             this.num= num; 
        }   
    }
    • 排序通用工具类
    public class ListSort<E> {  
        /** 
         *  
         * @param list 要排序的集合 
         * @param method 要排序的实体的属性所对应的get方法 
         * @param sort desc 为降序   
         */  
        public void Sort(List<E> list, final String method, final String sort) {  
            // 用内部类实现排序  
            Collections.sort(list, new Comparator<E>() {  
    
                public int compare(E a, E b) {  
                    int ret = 0;  
                    try {  
                        // 获取m1的方法名  
                        Method m1 = a.getClass().getMethod(method, null);  
                        // 获取m2的方法名  
                        Method m2 = b.getClass().getMethod(method, null);  
    
                        if (sort != null && "desc".equals(sort)) {  
    
                            ret = m2.invoke(((E)b), null).toString().compareTo(m1.invoke(((E)a),null).toString());  
    
                        } else {  
                            // 升序排序  
                            ret = m1.invoke(((E)a), null).toString().compareTo(m2.invoke(((E)b), null).toString());  
                        }  
                    } catch (NoSuchMethodException ne) {  
                        System.out.println(ne);  
                    } catch (IllegalArgumentException e) {  
                        // TODO Auto-generated catch block  
                        e.printStackTrace();  
                    } catch (IllegalAccessException e) {  
                        // TODO Auto-generated catch block  
                        e.printStackTrace();  
                    } catch (InvocationTargetException e) {  
                        // TODO Auto-generated catch block  
                        e.printStackTrace();  
                    }  
                    return ret;  
                }  
            });  
        }  
    }  
    
    • 方法调用
    public static void main(String[] args) {  
            ArrayList<A> listnew ArrayList<A>();  
            list.add(new A("语文",1));  
            list.add(new A("数学",2));  
            list.add(new A("英语",3));  
            ListSort<A> listSort= new ListSort<A>();  
            listSort.Sort(list"getNum""sort");  
            for(A a:list){  
                System.out.println(a.getName());  
            }
      }

    总结:按照以上执行(根据Num升序排序)出现顺序就是,语文,数学,英语。
    注:这个方法之前在别的地方看过示例略有修改,出处忘了,标为原创,若原作者看到请告知。

    展开全文
  • List集合中对象的某个属性进行排序 方法一 通过让实体类实现Comparable接口,并重写compareTo方法,但是这种方法只能针对一个实体进行,不推荐使用。 实体类 //lombok自动生成getset及toString @Data public class...

    对List集合中对象的某个属性进行排序

    方法一

    通过让实体类实现Comparable接口,并重写compareTo方法。

    实体类

    //lombok自动生成getset及toString
    @Data
    public class Entity implements Comparable<Entity>{
        String name;
        Integer age;
        public Entity(String name,Integer age){
            this.age=age;
            this.name=name;
        }
        @Override
        public int compareTo(Entity o) {
            if (this.getAge()>o.getAge()){
                return 1;
            }else if (this.getAge()<o.getAge()){
                return -1;
            }else{
                return 0;
            }
        }
    }
    

    执行

    public class ListSort {
        public static void main(String[] args) {
            List<Entity> list=new ArrayList<>();
            list.add(new Entity("张一",18));
            list.add(new Entity("张二",25));
            list.add(new Entity("张三",14));
            list.add(new Entity("张四",19));
            list.add(new Entity("张五",23));
            Collections.sort(list);
            list.forEach(x->System.out.println(x.toString()));
            
            //console打印 
            //Entity{name='张三', age=14}
            //Entity{name='张一', age=18}
            //Entity{name='张四', age=19}
            //Entity{name='张五', age=23}
            //Entity{name='张二', age=25}	
        }
    

    方法二

    通过给sort方法传递一个比较器进行比对,我这里使用了lambda表达式,也可以new一个Comparator重写比较器。

    实体类

    //lombok自动生成getset及toString
    @Data
    public class Entity{
        String name;
        Integer age;
        public Entity(String name,Integer age){
            this.age=age;
            this.name=name;
        }
    }
    

    执行

    public class ListSort {
        public static void main(String[] args) {
            List<Entity> list=new ArrayList<>();
            list.add(new Entity("张一",18));
            list.add(new Entity("张二",25));
            list.add(new Entity("张三",14));
            list.add(new Entity("张四",19));
            list.add(new Entity("张五",23));
            list.sort((o1,o2)->{
                if (o1.getAge()>o2.getAge()){
                    return 1;
                }else if(o1.getAge()<o2.getAge()){
                    return -1;
                }else{
                    return 0;
                }
            });
            list.forEach(x-> System.out.println(x.toString()));
            /*
            console打印
            Entity{name='张三', age=14}
            Entity{name='张一', age=18}
            Entity{name='张四', age=19}
            Entity{name='张五', age=23}
            Entity{name='张二', age=25}
            */
        }
    
    展开全文
  • 1、创建实体类 2、实现comparator接口,重写compare方法 3、通过集合工具类collections中sort方法进行排序

    1、创建实体类

    2、实现comparator接口,重写compare方法

    3、通过集合工具类collections中sort方法进行排序

     

     

     

    展开全文
  • 背景: 现在有一个 User 对象,具有 name 和 age 属性。如果现在将多个 User 对象实例放入...通过实现 Comparator 接口做一个 User 对象的比较器,然后传入容器对象和比较器利用 Collections.sort() API 进行排序。 ...

    背景:

    现在有一个 User 对象,具有 name 和 age 属性。如果现在将多个 User 对象实例放入 List<User> 容器中,然后让你根据 User.name or User.age 排序,该如何做呢?

    思路:

    通过实现 Comparator 接口做一个 User 对象的比较器,然后传入容器对象和比较器利用 Collections.sort() API 进行排序。

    User Class:

     

    class User {
     String name;
     String age;
     
     public User(String name,String age){
      this.name=name;
      this.age=age;
     }
    
     // Setter and Getter Methods
     ......
    }

     

    ComparatorUser Class:

     

    public class ComparatorUser implements Comparator{
    
     public int compare(Object obj0, Object obj1) {
      User user0=(User)obj0;
      User user1=(User)obj1;
    
       //首先比较年龄,如果年龄相同,则比较名字
    
      int flag=user0.getAge().compareTo(user1.getAge());
      if(flag==0){
       return user0.getName().compareTo(user1.getName());
      }else{
       return flag;
      }  
     }
     
    }

     

    SortTest Class:

    public class SortTest {
    
    public static void main(String[] args){
      List userlist=new ArrayList();
      userlist.add(new User("dd","4"));
      userlist.add(new User("aa","1"));
      userlist.add(new User("ee","5"));
      userlist.add(new User("bb","2"));  
      userlist.add(new User("ff","5"));
      userlist.add(new User("cc","3"));
      userlist.add(new User("gg","6"));
      
      ComparatorUser comparator=new ComparatorUser();
      Collections.sort(userlist, comparator);
       
      for (int i=0;i<userlist.size();i++){
       User user_temp=(User)userlist.get(i);
          System.out.println(user_temp.getAge()+","+user_temp.getName()); 
      }
     }
    
    }

     

     

     测试结果:
       1, aa
       2, bb
       3, cc
       4, dd
       5, ee
       5, ff
       6, gg

    参考:

    http://www.blogjava.net/zygcs/archive/2008/01/17/176032.html

    转载于:https://www.cnblogs.com/orientsun/archive/2012/07/04/2576546.html

    展开全文
  • 导致不同的对象包含相同的属性。这也是数据重复的一种。下面是我在处理一个属性或者多个属性相同时采用的方法。当然你可以采用其他的方法。比较蠢的方法是两个for循环。但是对于数据的删除是很容易出现异常的。因此...
  • 根据List里面的对象属性对象排序

    千次阅读 2016-12-15 11:16:46
    那么就会产生这样的需求,如何针对对象里面的属性的大下进行排序呢。 比如说,数据库里面有各种用户信息,我们将用户信息查询出来放到User对象里面,将所有的user添加到一个list里面,我们如何通过这些user年龄大小...
  • 如何根据对象的属性,对集合(list / set)中的对象进行排序 一:针对list 通过java.util.Collections的sort方法,有2个参数,第一个参数是list对象,第二个参数是new Comparator<...
  • [实现此接口的对象列表(和数组)可以通过 Collections.sort(和 Arrays.sort)进行自动排序。实现此接口的对象可以用作有序映射中键或有序集合中元素,无需指定比较器。 对于类 C ...
  • 主要通过反射拿到对象的属性,然后重写sort方法,比较属性值。
  •  通过java.util.Collectionssort方法,有2个参数,第一个参数是list对象,第二个参数是new Comparator&lt;对象类&gt;(){}方法,这个方法实现了compare()方法,具体代码如下所示: package ...
  • 实际场景中,我们有时需要根据自定义规则对List集合中元素进行排序,怎么实现呢? 我们可以通过实现Comparator接口来自定义排序规则.实现它public int compara(Object o1, Object o2)方法,然后使用Conllections...
  • 一:针对list通过java.util.Collectionssort方法,有2个参数,第一个参数是list对象,第二个参数是new Comparator(){}方法,这个方法实现了compare()方法,具体代码如下所示:代码执行结果为:[姓名:张三;...
  • 一 、通过code自然排序 resultList.sort((h1, h2) -> h1.getCode().compareTo(h2.getCode())); 二 、通过code反序排列 Comparator<ProomRealTimeOut> comparator = (h1, h2) -> h1.getCode().compareTo(h2.get...
  • 本文主要介绍通过JDK提供原始去重排序和使用Lambda表达式形式进行集合中数据去重和排序 一.环境准备: 1.实体类: public class User { private Long id; private String name; public Long getId() { ...
  • 一:针对list通过java.util.Collectionssort方法,有2个参数,第一个参数是list对象,第二个参数是new Comparator(){}方法,这个方法实现了compare()方法,具体代码如下所示:package test2;import java.util....
  • 根据观看次数的多少排序 ( resultList集合中是IndexCardResult对象通过IndexCardResult中的属性viewNum的多少对集合排序) Collections.sort(resultList,new Comparator&lt;IndexCardResult&gt;(){  @...
  • 进行排序,排序规则为根据bean某个属性通过对apache commons研究,发现里面已经提供了很好方法: Collections.sort(beanList, new BeanComparator("property"));   BeanComparator似乎是根据...
  • 可以通过两种方式自定义对象的属性大小进行比较,对一个list或数组对根据属性排序一个list或数组
  • 【Java】对于自定义对象List进行排序

    千次阅读 2012-10-22 17:07:34
    一般针对自定义对象的某一属性进行列表排序,自定义属性一般有多个属性,如果要排序的属性比较少(1个或2个),可以写两种比较,当然我们有更好的方法,java class类提供了getDeclaredMethod可以通过对象的方法名...
  • 这篇文章主要介绍了如何基于Java实现对象List排序,文中通过示例代码介绍非常详细,对大家学习或者工作具有一定参考学习价值,需要朋友可以参考下按照对象某个属性,对对象List进行排序。以初唐四杰成绩...
  • 有时候,我们会有这样需求:通过制定类中元素,对多个实例对象进行排列显示。 那么,今天我为大家写了这样一个类,以便使用 话不多说,贴上源码 public class ListSortE>{ /** * * @param list排序...
  • 对列表(List)中的自定义对象,要求能够按照对象的属性(字段)进行排序(正序、倒序)。 如:用户对象(Member)有用户名(username)、级别(level)、出生日期(birthday)等字段,要求可以分别对它的三个字段...
  • 容器排序——List

    2017-07-11 19:58:00
    一个很初级的想法:对数组进行遍历,按照对象的属性进行排序。 如此就产生第一个简单的排序方法,遍历数组获取对象,通过冒泡排序法对数组进行排序。 1 package Sort; 2 3 import java.util.List; 4 ...
  • java集合对象排序总结

    2020-12-02 00:41:50
    java集合对象按照某个属性进行排序有很多种方式,下面简单记录下 1对象实现Comparable接口中compareTo 方法,然后通过Collections.sort进行排序 2通过Collections.sort配合匿名内部类Comparator来处理(Java1.7或...
  • List排序

    万次阅读 2010-12-22 19:47:00
    在使用这些泛型集合时我们有时需要对其进行排序,下面我们就一块看一下List如何进行排序(像Dictionary也有其相应排序方式,例如说使用Linq语法方式,今天暂且不说)。 主要内容: 初始工作 默认排序方式 通过...
  • 可以通过构造方法设置3个属性的内容,并覆写Object类中的toString()方法,在List集合中加入5个学生对象,并将内容输出,之后使用比较器将对象的内容进行排序并显示在屏幕上。 import java.util.List; import java....
  • 如果要获取某个参数类型,可以用T.getClass().getName()进行判断,可是要获取该对象其中成员变量或者成员方法,那么就只有通过反射(Field)机制来实现,通过加载类字节码方式来获取相关类信息。 Field 是什么呢...
  • ××××××××××××××××××××××××××× 注意:是Object的,不是自己定义的对象 ...首先,介绍一下struts2的iterator标签 ...1. value属性:可选的属性,value属性是指一个...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 215
精华内容 86
关键字:

list通过对象的属性进行排序