-2

我想根据名称属性对包含 MyBean 对象的列表进行排序,而无需触及 MyBean 类

我有一个像

public class MyBean
{
    private String name, city;

    public void setName(String name)
    {
      this.name = name;
    }

    public void setCity(String city)
    {
      this.city= city;
    }

    public String getName()
    {
      return name;
    }

    public String getCity()
    {
      return city;
    }

}

我还有另一堂课,比如,

public class MyCollection
{
    p s v main(String args[])
    {
       MyBean bean1 = new MyBean();
       MyBean bean2 = new MyBean();

       bean1.setName("arun");
       bean1.setCity("xyz");

       bean2.setName("raju");
       bean2.setCity("abc");

       bean2.setName("bharani");
       bean2.setCity("abcfr");       

       ArrayList list = new ArrayList():
       list.add(bean1);
       list.add(bean2);
    }

}

排序后应打印列表名称,如 arun bharani raju

4

3 回答 3

2

使用 Comparator 或 Comparable 实现基于 bean 属性的排序。

如果您更喜欢 Comparator 使用此代码。

   Collections.sort(list, new Comparator<MyBean >() {
        @Override public int compare(MyBean b1, MyBean b2) {
            return b1.name.compareTo(b2.name);
        }

    });

或以这种方式使用 Comparable

   public class MyBean  implements Comparable<MyBean> {
        private String name, city;    
        // Add/generate getters/setters
         public int compareTo(MyBean  other) {
             return name.compareTo(other.name);
         }    
    }

   List<MyBean> list= new ArrayList<MyBean>();
   Collections.sort(list);
于 2013-09-23T11:50:29.150 回答
2

您还可以使用Java 8 中的lamda 表达式以及Collections.sort()类似的

Collections.sort(list, (MyBean b1, MyBean b2) -> b1.getName().compareTo(b2.getName()));

干净多了!:)

于 2015-08-06T13:56:25.510 回答
1

Collections.sortComparator一起使用

  Collections.sort(list,new Comparator<MyBean>(){
     @Override
     public int compare(MyBean myBean1, MyBean myBean2) {
        return myBean1.getName().compareTo(myBean2.getName());
     }
  }
于 2013-09-23T11:51:19.520 回答