如何基于myobject的属性</myobject>对ArrayList <myobject>进行排序

时间:2012-05-30 14:35:07

标签: java sorting collections arraylist

我想根据对象属性对ArrayList中的一些对象进行排序。 对象有:

public class Minterm

{
    String minTerm;
    char flagTick;
    String minTermDerive;
    int groupNo;
    String adjGroup;
    static int MaxLiterals;

然后我在主要方法中有这个:

ArrayList<Minterm> column =new  ArrayList<Minterm>();

然后我在列表中添加了Minterm类型的一些对象。但最后我想组织它们并在成员变量groupNo(升序)上对它们进行排序。

我搜索并提出了我尝试过但没有成功的可比较和比较器接口。有没有其他方法可以做到这一点?或者我正在做比较器实现错误。

编辑: 以下是我为Comparator编写的代码。请确认它是否会按升序排序?

package backEnd;

import java.util.Comparator;

public class Comp implements Comparator<Minterm>
{
        @Override
        public int compare(Minterm a, Minterm b) 
        {
            return a.getgroupOne().compareTo(b.getgroupOne());
        }
}

我将其视为:

Collections.sort(column , new Comp());

似乎工作正常。但我对它没有完全理解。 请确认它是否会按升序排序?

4 个答案:

答案 0 :(得分:6)

您应该Minterm实施Comparable<MinTerm>或为Comparator撰写自定义MinTerm,然后使用Collections.sort

使用比较器,它看起来像这样:

Collections.sort(column, new Comparator<Minterm>() {
    @Override
    public int compare(Minterm o1, Minterm o2) {
        return Integer.valueOf(o1.groupNo).compareTo(o2.groupNo);
    }
});

关于您的修改:

是。根据升序顺序中的组对Minterm进行排序。

答案 1 :(得分:3)

Collections.sort()Comparator界面正是这项工作的正确工具。

以下几行应该做(未经测试):

  Collections.sort(column, new Comparator<Minterm>() {
     public int compare(Minterm o1, Minterm o2) {
       return Integer.valueOf(o1.groupNo).compareTo(o2.groupNo);
     }
  });

答案 2 :(得分:2)

两种方式,使用Collections.sort(..)

  • 使您的对象实现Comparable。涉及更改原始类,这可能是不可能的
  • 提供自定义Comparator。它需要您的对象的实例并进行比较。不需要改变课程。

无论哪种方式,请确保符合接口的合同。

答案 3 :(得分:0)

以下是示例代码(有关更多示例,请参阅http://java2novice.com/java-collections-and-util/arraylist/sort-comparator/):

public class MyArrayListSort {

    public static void main(String a[]){

        List<Empl> list = new ArrayList<Empl>();
        list.add(new Empl("Ram",3000));
        list.add(new Empl("John",6000));
        list.add(new Empl("Crish",2000));
        list.add(new Empl("Tom",2400));
        Collections.sort(list,new MySalaryComp());
        System.out.println("Sorted list entries: ");
        for(Empl e:list){
            System.out.println(e);
        }
    }
}

class MySalaryComp implements Comparator<Empl> {

    @Override
    public int compare(Empl e1, Empl e2) {
        if(e1.getSalary() < e2.getSalary()){
            return 1;
        } else {
            return -1;
        }
    }
}

class Empl{

    private String name;
    private int salary;

    public Empl(String n, int s){
        this.name = n;
        this.salary = s;
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getSalary() {
        return salary;
    }
    public void setSalary(int salary) {
        this.salary = salary;
    }
    public String toString(){
        return "Name: "+this.name+"-- Salary: "+this.salary;
    }
}