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) o1).get(1) instanceof String) { String firstString = ((ArrayList) o1).get(1); String secondString = ((ArrayList) 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是您想要排序的列数。

boolean isNumeric(String str); 可以使用函数,因为您无法在一个列表中存储不同类型的对象,因此我将其识别为比较器并将String解析为任何其他类型。

请记住,这个comparator及其“计算”被称为算法所做的每一次比较,所以效率极低……尽管如此,这是一种解决方案。