【问题标题】:How to sort an arraylist based on a bean?如何根据 bean 对数组列表进行排序?
【发布时间】:2015-08-01 02:24:33
【问题描述】:
public List<Bean> getList() {
    List<Bean> beanList = new ArrayList<Bean>();
    // some code here

    while(hasNext()) {
        // some code here
        Bean bean = new Bean();

        listing(bean, beanList);
    }

    // sort by age bean here before returning

    return beanList
}

public void listing(Bean bean, List<Bean> beanList) {
    //some code here

    bean.setName(var1);
    bean.setAddress(var2);
    bean.setAge(var3);

    beanList.add(bean)  
}

我需要根据年龄对数组列表进行排序。

我尝试使用收集器,但我不确定如何使用这些代码实现它。

谢谢。

【问题讨论】:

    标签: sorting arraylist collections javabeans


    【解决方案1】:

    或者你可以在你的 Bean 类中实现类似的接口-

    public class SortedList{
    
        public static void main(String s[]) {
            List<Bean> beanList=new SortedList().getList(10);
            for(Bean bean:beanList){System.out.println(bean.getAge());}
    
    
    }
    
        public List<Bean> getList(int size) {
            List<Bean> beanList = new ArrayList<Bean>();
            int i=0;
    
            while(i<size) {
                Bean bean = new Bean();
                listing(bean, beanList);
                i++;
            }
    
            Collections.sort(beanList);
    
            return beanList;
        }
        Random r=new Random();
        public void listing(Bean bean, List<Bean> beanList) {
    
    
            bean.setName("name");
            bean.setAddress("address");
            bean.setAge(r.nextInt(81)+18);
    
            beanList.add(bean);  
        }
    }
    
    class Bean implements Comparable<Bean>{
    String name;    
    String address;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    int age;
    @Override
    public int compareTo(Bean bean) {
    
        return this.getAge()-bean.getAge();
    }
    
    }
    

    【讨论】:

      【解决方案2】:
      import java.util.ArrayList;
      import java.util.Collections;
      import java.util.Comparator;
      import java.util.List;
      import java.util.Random;
      
      public class BinarySearch{
      
          public static void main(String s[]) {
              List<Bean> beanList=new BinarySearch().getList(10);
              for(Bean bean:beanList){System.out.println(bean.getAge());}
      
      
      }
      
          public List<Bean> getList(int size) {
              List<Bean> beanList = new ArrayList<Bean>();
              int i=0;
      
              while(i<size) {
                  Bean bean = new Bean();
                  listing(bean, beanList);
                  i++;
              }
              Comparator<Bean> c=new Comparator<Bean>(){
                  @Override
                  public int compare(Bean bean1, Bean bean2) {
                      return bean1.getAge()-bean2.getAge();
                  }};
              Collections.sort(beanList,c);
              return beanList;
          }
      
      
          Random r=new Random();
          public void listing(Bean bean, List<Bean> beanList) {
      
      
              bean.setName("name");
              bean.setAddress("address");
              bean.setAge(r.nextInt(81)+18);
      
              beanList.add(bean);  
          }
      }
      
      class Bean {
      String name;    
      String address;
      public String getName() {
          return name;
      }
      public void setName(String name) {
          this.name = name;
      }
      public String getAddress() {
          return address;
      }
      public void setAddress(String address) {
          this.address = address;
      }
      public int getAge() {
          return age;
      }
      public void setAge(int age) {
          this.age = age;
      }
      int age;
      
      
      }
      

      【讨论】:

        【解决方案3】:

        您需要实现Comparator 接口。在这种情况下,您的实施将是

            public class BeanAgeComparator implements Comparator<Bean> {
        
            int compare(Bean o1,Bean o2) {
            return o1.getAge() - o2.getAge();
            }
            }
        

        然后你可以使用Collections.sort(beanList, new BeanAgeComparator());List进行排序

        【讨论】:

        • 比较函数?另外,我可以改用long compare 吗?
        • 不,它应该是'int compare()',它在Comparator接口中是这样定义的。我已经编辑了我的答案以包括完整的实施
        • 知道了。我会试试这个并回复你。谢谢
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-08
        • 2015-08-21
        • 2013-12-01
        • 1970-01-01
        • 2022-01-18
        • 2016-10-24
        相关资源
        最近更新 更多