Java 2D ArrayList和排序
我需要通过项目所在的过道对购物清单进行排序,例如:
[面包] [1]
[牛奶] [2]
[谷物] [3]
我打算用ArrayList做这个,并想知道如何制作2D ArrayList奖金问题:关于如何按过道号排序的任何想法?
你有没有一个课程来保存你的项目+过道信息? 就像是:
public class Item { private String name; private int aisle; // constructor + getters + setters }
如果不这样做,请考虑制作一个 – 这绝对是一种比尝试将这些属性粘贴到另一个ArrayList中的ArrayList更好的方法。 一旦你有了上课,你要么需要为你的对象写一个Comparator ,要么让’Item’可以自己比较 :
public class Item implements Comparable- { .. same stuff as above... public int compareTo(Item other) { return this.getAisle() - other.getAisle(); } }
然后你要做的就是调用sort:
List- items = new ArrayList
- (); ... populate the list ... Collections.sort(items);
如果要对ArrayLists的ArrayList进行排序,则可以使用ColumnComparator 。
如果要对自定义对象的ArrayList进行排序,则可以使用BeanComparator 。
我知道很久以前就问过这个问题,但实际上我遇到了同样的问题。 如果您不知道列表中有多少变量,但这不是一个很大的数字,您可以为每个选择实现比较器。 例如
我有ArrayList
并希望按列排序,我知道嵌套列表由可变数量的对象组成,我可以为每个可能的值实现比较:
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) o1).get(1))) { Integer firstInteger = Integer.parseInt(((ArrayList ) o1).get(1)); Integer secondInteger = Integer.parseInt(((ArrayList ) o2).get(1)); return firstInteger.compareTo(secondInteger); } if (((ArrayList
}
并这样称呼:
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是您想要排序的列数。
boolean isNumeric(String str);
可以使用函数,因为您无法在一个列表中存储不同类型的对象,因此我将其识别为比较器并将String解析为任何其他类型。
请记住,这个comparator
及其“计算”被称为算法所做的每一次比较,所以效率极低……尽管如此,这是一种解决方案。