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(昇順)で並べ替えたいと思います。

私は検索して、試したが成功しなかった比較可能なコンパレータインターフェイスを思いついた。これを行う他の方法はありますか?または、コンパレータの実装が間違っていますか?

編集: 以下は私がコンパレータ用に書いたコードです。昇順でソートされるかどうか確認してください。

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>ComparatorMinTermCollections.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

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 に答える