0

我想根据对象属性对 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

4 回答 4

6

您应该让Minterm实现Comparable<MinTerm>或编写自定义ComparatorMinTerm然后使用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根据组的升序对 s 进行排序。

于 2012-05-30T14:36:10.173 回答
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);
     }
  });
于 2012-05-30T14:36:49.020 回答
2

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

  • 让你的对象实现Comparable。涉及更改原始类,这可能是不可能的
  • 供应定制Comparator。它需要您的对象的实例并比较它们。不需要更改类。

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

于 2012-05-30T14:36:38.667 回答
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;
    }
}
于 2012-07-31T11:23:39.397 回答