0

关于如何应用 Collections.sort 方法按 itemData ArrayList 中每个 grocItem 对象的优先级对我的数组列表进行排序的任何想法?

public class GroceryProgram {

    private final static int GROC_SIZE = 6;
    private final List<ItemData> itemData = new ArrayList<ItemData>();

    private void setUpList() {

        Scanner keyboard = new Scanner(System.in);

        for (int i = 0; i < GROC_SIZE; i++)  {

           System.out.print("\nEnter item name (" + i + ") : ");               
           String name = keyboard.next();

           System.out.print("\nEnter the price of item (" + i + ") : ");
           double cost = keyboard.nextDouble();

           System.out.print("\nEnter Priority Number (" + i + ") : ");
           int priority = keyboard.nextInt();

           ItemData grocItem = new ItemData(name, cost, priority);
           itemData.add(grocItem); // add grocery items to itemData ArrayList

           Collections.sort(grocItem);
           for (Int priority : priority) {
               System.out.println(integer);
4

3 回答 3

2

sort()用比较器调用。例如,按优先级升序排列的 Comparator 可能如下所示。

Collections.sort( items, new Comparator<ItemData>() {
    public int compare (ItemData o1, ItemData o2) {
        int comp = o1.getPriority() - o2.getPriority();
        return comp;
    }
});

PS:'itemData' 是错误的变量命名 - 它会引用单个项目,而不是列表。“groceryItems”、“stockItems”或“itemList”会更好。

变量名称应该使您能够用有意义、清晰、简洁的英语来描述您的软件。

希望这可以帮助。

于 2013-07-20T05:20:22.377 回答
0

您可以使用Collections.sort(List list, Comparator c)来处理这个问题吗?您可以简单地执行以下操作:

Collections.sort(itemData, new Comparator() {
  public int compare(Object o1, Object o2) {
    // Return a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.
  }
}
于 2013-07-20T05:19:30.873 回答
0

您可以使用自定义比较器,如下所示:

Collections.sort(itemData ,new PriorityComparator());

        //print sorted arraylist,it will print the data in ascending order (low priority->high priority).feel free to modify if you want to go for descending order
        System.out.println(itemData );

PriorityComparator 类定义:

private static class PriorityComparator implements Comparator{

    @Override
    public int compare(ItemData object1, ItemData object2) {
        return (object1.priority< object2.priority) ? -1: (object1.priority> object2.priority) ? 1:0 ;
    }

}

参考:

如何在 Java 中排序数组列表示例

我希望它会有所帮助!

于 2013-07-20T05:49:18.753 回答