2

このArraylistをソートしたい

public List<Machine> machines;

machines = machineController.execute().get();
Collections.sort(machines, new Comparator<Machine>() {
    public int compare(Machine obj1, Machine obj2)
    {
        return obj1.getManufacturer().compareToIgnoreCase(obj2.getManufacturer());
    }
});

これで、リストに A から Z までの製造元が表示されます。これで問題なく動作します。

BMW Z1、

BMX X6、

フォルクスワーゲン ジェッタ、

フォルクスワーゲン ゴルフ、

問題は次のとおりです。メーカーとモデルで並べ替えるにはどうすればよいですか? (obj.getManufaturer & obj.getModel)

BMW X6、

BMW Z1、

フォルクスワーゲン ゴルフ、

フォルクスワーゲン ジェッタ

4

2 に答える 2

4

製造元とモデルの両方で並べ替えるには、Machine クラスで「比較」をオーバーライドする必要があります。今のやり方で見ると、単純にメーカーで比較しているだけです。エンティティ全体として「マシン」で比較したい。

これで問題を解決するのに十分なはずですが、サンプルコードが必要な場合はお知らせください。この投稿を編集できます:)

編集:私がテストした実例:

Machine クラス内で次を使用します。

public class Machine implements Comparable<Machine>

次に、次のものが必要です。

@Override
public int compareTo(Machine o) {
    if (manufacturer.compareToIgnoreCase(o.manufacturer) == 0)
        return model.compareToIgnoreCase(o.model);
    else
        return manufacturer.compareToIgnoreCase(o.manufacturer);
}

そして、あなたは単に呼び出すことができます:

Collections.sort(machines);

ハッピーコーディング!

私が個人的にテストに使用した正確なコードは次のとおりです。

public class Machine implements Comparable<Machine> {

private String manufacturer;
private String model;
private double price;

public Machine(String man, String mod) {
    this(man, mod, 0);
}

public Machine(String man, String mod, double p) {
    manufacturer = man;
    model = mod;
    price = p;
}

/**
 * @return the manufacturer
 */
public String getManufacturer() {
    return manufacturer;
}

/**
 * @return the model
 */
public String getModel() {
    return model;
}

public double getPrice() {
    return price;
}

@Override
public int compareTo(Machine o) {
    if (manufacturer.compareToIgnoreCase(o.manufacturer) == 0)
        return model.compareToIgnoreCase(o.model);
    else
        return manufacturer.compareToIgnoreCase(o.manufacturer);
}

@Override
public String toString() {
    return manufacturer.toString() + " " + model.toString();
}

}

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Blah {
    public static void main(String[] args) {
        List<Machine> machines = new ArrayList<>();

        machines.add(new Machine("Volkswagen", "Jetta"));
        machines.add(new Machine("Volkswagen", "Golf"));
        machines.add(new Machine("BMW", "Z1"));
        machines.add(new Machine("BMW", "X6"));

        Collections.sort(machines);

        for (Machine m : machines)
            System.out.println(m.toString());
    }
}

私にとって、これは次の出力を出します:

BMW X6
BMW Z1
Volkswagen Golf
Volkswagen Jetta
于 2013-10-30T15:05:29.093 に答える
1

あなたはこれを行うことができます:

public int compare(Machine obj1, Machine obj2){
    if (obj1.getManufacturer().compareToIgnoreCase(obj2.getManufacturer()) != 0) {
        return obj1.getManufacturer().compareToIgnoreCase(obj2.getManufacturer());
    } else {
        return obj1.getModel().compareToIgnoreCase(obj2.getModel());
    }
}
于 2013-10-30T15:06:00.450 に答える