我想整理一下这个数组列表
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的制造商,很好用。
宝马Z1
BMX X6,
大众捷达
大众高尔夫,
问题是:我怎样才能按制造商和型号进行分类?(obj.getManufaturer & obj.getModel)
宝马X6
宝马Z1
大众高尔夫,
大众捷达
发布于 2013-10-30 15:05:29
您需要覆盖计算机类中的“比较”,以便同时按制造商和型号进行排序。如果你看看你现在拥有它的方式,你只是在通过制造商进行比较。你想用“机器”作为一个整体进行比较。
这应该足以解决您的问题,但是如果您想要示例代码,请让我知道,我可以编辑以下文章:)
编辑:我测试过的工作示例:
在机器类中使用:
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-30 15:06:00
你可以这样做:
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());
}
}https://stackoverflow.com/questions/19686388
复制相似问题