我需要通過過道的項目位於例如排序購物列表:
[麪包] [1]
[牛奶] [2]
[穀物] [3]爪哇2D ArrayList和排序
我打算這樣做ArrayList和想知道如何製作一個二維ArrayList 獎金問題:關於如何按過道數進行排序的任何想法?
我需要通過過道的項目位於例如排序購物列表:
[麪包] [1]
[牛奶] [2]
[穀物] [3]爪哇2D ArrayList和排序
我打算這樣做ArrayList和想知道如何製作一個二維ArrayList 獎金問題:關於如何按過道數進行排序的任何想法?
難道你沒有持有你的物品+過道信息的班級嗎?喜歡的東西:
public class Item {
private String name;
private int aisle;
// constructor + getters + setters
}
如果你不這樣做,考慮做一個 - 它絕對不是試圖這些屬性粘成ArrayList的另一個的ArrayList中的更好的方法。一旦你有說類,你要麼需要通過自己編寫的對象Comparator或使「項」 Comparable:
public class Item implements Comparable<Item> {
.. same stuff as above...
public int compareTo(Item other) {
return this.getAisle() - other.getAisle();
}
}
然後你要做的就是那種調用:
List<Item> items = new ArrayList<Item>();
... populate the list ...
Collections.sort(items);
如果你想排序ArrayList的ArrayList,那麼你可以使用ColumnComparator。
如果您想排序自定義對象的ArrayList,那麼您可以使用BeanComparator。
我知道這個問題很久以前就問過了,但實際上我有同樣的問題。如果您不知道列表中有多少變量,但這不是一個大數字,您可以爲每個選項都實施比較器。例如
我有ArrayList<ArrayList<Object>>
,並希望通過列的排序,而且我知道,嵌套列表包含的對象數目不定的我就可以實現比較每一個可能的值:
public class SecondColumnComparator implements Comparator {
public static boolean isNumeric(String str) {
try {
Integer integer = Integer.parseInt(str);
} catch (NumberFormatException nfe) {
return false;
}
return true;
}
@Override
public int compare(Object o1, Object o2) {
if (isNumeric(((ArrayList<String>) o1).get(1))) {
Integer firstInteger = Integer.parseInt(((ArrayList<String>) o1).get(1));
Integer secondInteger = Integer.parseInt(((ArrayList<String>) o2).get(1));
return firstInteger.compareTo(secondInteger);
}
if (((ArrayList<Object>) o1).get(1) instanceof String) {
String firstString = ((ArrayList<String>) o1).get(1);
String secondString = ((ArrayList<String>) o2).get(1);
return firstString.compareTo(secondString);
}
throw new Exception();
}
}
並稱之爲是這樣的:
switch (valueSelected) {
case 0:
Collections.sort(this.listOfLists, new FirstColumnComparator());
break;
case 1:
Collections.sort(this.listOfLists, new SecondColumnComparator());
break;
case 2:
Collections.sort(this.listOfLists, new ThirdColumnComparator());
break;
case 3:
Collections.sort(this.listOfLists, new FourthColumnComparator());
break;
default:
}
在每一個比較只是修改.get(x)
其中x是collumn數由你想排序。
可能會使用boolean isNumeric(String str);
函數,因爲您不能在一個列表中存儲不同類型的對象,所以我將這個識別放到比較器中,並將String解析爲任何其他類型。
請記住,這個comparator
及其「計算」被稱爲每一個算法的比較,所以它是非常低效的...... 儘管這樣的事實,這是一種溶劑。
好吧我會研究這個 – Raptrex 2009-10-03 00:27:19
我是否需要創建多個對象或者什麼,因爲我認爲使用ArrayList的原因是因爲我不知道會有多少物品 – Raptrex 2009-10-03 00:51:49
您必須創建多個物品是,並將它們添加到ArrayList。 'items.add(new Item(「Bread」,1)); items.add(new Item(「Milk」,2));'等等... – ChssPly76 2009-10-03 01:01:11