製造元とモデルの両方で並べ替えるには、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