我似乎找不到按"rent(("和"profit(("对列表列表进行排序的方法。我怎样才能做到这一点?
似乎找不到任何有帮助的东西。
父类:
public abstract class Zone
{
int area; //zonos plotas kv metrais
float price; //kaina uz kv metra
int jobPlaces; //darbo vietu skaicius
abstract float rent();
abstract float profit();
abstract float expenses();
abstract float totalProfit();
}
我有 3 个类(住宅、商业、工业(扩展了这个类并覆盖了它的抽象方法。
我定义列表:
static ArrayList<Zone> coll1 = new ArrayList<Zone>();
static ArrayList<Zone> coll2 = new ArrayList<Zone>();
static ArrayList<ArrayList<Zone>> superCollection = new ArrayList<ArrayList<Zone>>();
然后我随机(例如 3 个住宅区、5 个商业区、1 个工业区(填写 coll1 和 coll2 并将它们添加到 superCollection 中。
我如何通过"rent(("打印它,然后按升序或降序按"profit(("对其进行排序?
编辑:
Collections.sort(superCollection, new Comparator<ArrayList<Zone>>()
{
@Override
public int compare(ArrayList<Zone> arg0, ArrayList<Zone> arg1)
{
return arg0.get(0).profit().compareTo(arg1.get(0).profit());
}
});
尝试运行这个,但它没有按利润排序:
zone rent profit
Residential zone: 11578.3 5534.4
Residential zone: 1963.7 2935.1
Residential zone: 4029.5 4987.2
Residential zone: 13399.6 11453.7
Residential zone: 2763.7 7212.9
Residential zone: 3961.3 3384.8
Commercial zone: 29041.3 59291.3
Commercial zone: 10483.6 42842.5
Industrial zone: 48332.3 939667.0
Industrial zone: 31563.8 1074516.2
Residential zone: 8347.1 3587.1
Commercial zone: 26177.9 47750.9
Industrial zone: 33917.8 1005413.1
Industrial zone: 25704.2 1251655.3
Industrial zone: 30268.5 1131300.0
Industrial zone: 42225.1 588861.8
Industrial zone: 32779.2 1220447.5
Industrial zone: 19686.2 863131.5
由于您需要以两种不同的方式打印排序的列表,因此您需要两个比较器。 将超级集合中的列表合并为一个列表,使用第一个比较器对其进行排序,打印,使用第二个比较器对其进行排序,然后再次打印。
private Comparator<Zone> rentComparator = new Comparator<Zone>() {
@Override
public int compare(Zone o1, Zone o2) {
Float o1Rent = o1.rent();
Float o2Rent = o2.rent();
return o1Rent.compareTo(o2Rent);
}
};
private Comparator<Zone> profitComparator = new Comparator<Zone>() {
@Override
public int compare(Zone o1, Zone o2) {
Float o1Rent = o1.profit();
Float o2Rent = o2.profit();
return o1Rent.compareTo(o2Rent);
}
};
public void printSortedLists(List<List<Zone>> superCollection) {
List<Zone> combinedList = new ArrayList<>();
for (List<Zone> list : superCollection) {
combinedList.addAll(list);
}
Collections.sort(combinedList, rentComparator);
//TODO now print the rent sorted list here
Collections.sort(combinedList, profitComparator);
//TODO now print the profit sorted list here
}