java – 如何使用Comparator接口

我是java的新手,我真的不知道如何使用比较器接口.
我在Inventory类和Item类中有一个ItemsList.
在我写的Item类中:

public class Item implements Comparator<Item> {
    //stuff
    ...
    @Override
    public int compare(Item a, Item b) {
        if (a.getID().compareToIgnoreCase(b.getID())>0)
            return 1;
        else if (a.getID().compareToIgnoreCase(b.getID())<0)
            return -1;
        else
            return 0;
    }
}

getID()方法只提供id,我必须使用它来按字母顺序排列项目.
我不确定这是不对的,它让我把@Override注释,我不知道为什么.我还写了一个界面,只是说:

 public interface Comparator<Item>
{
    int compare(Item a, Item b);
}

我不确定那一点.另外,我如何实现此方法来对库存类中创建的arraylist进行排序?

谢谢,如果我的问题没有意义或需要澄清,请告诉我.

解决方法:

要使用Comparator接口,您必须实现它并将其作为匿名类传递给Collections.sort(List list, Comparator c)作为第二个参数.

如果只想将列表传递给Collections.sort(List list),则Item类必须使用实现Comparable接口.

因此,在这两种情况下,Collections.sort方法都知道如何对列表中的元素进行排序

这是一些示例代码:

物品类实施可比较库存,包含物品清单

public class Item implements Comparable<Item> {

    String id = null;

    public Item(String id) {
        this.id = id;
    }

    @Override
    public String toString() {
        return id;
    }

    @Override
    public int compareTo(Item o) {
        return - id.compareToIgnoreCase(o.id);
    }
}


public class Inventory {

    List<Item> items = new ArrayList<>();

    public void addItem(Item item) {
        items.add(item);
    }

    public static void main(String[] args) {
        Inventory inventory = new Inventory();
        inventory.addItem(new Item("2"));
        inventory.addItem(new Item("4"));
        inventory.addItem(new Item("1"));
        inventory.addItem(new Item("7"));

        Collections.sort(inventory.items, new Comparator<Item>() {
            @Override
            public int compare(Item o1, Item o2) {
                return o1.id.compareToIgnoreCase(o2.id);
            }
        });
        System.out.println(inventory.items);

        Collections.sort(inventory.items);
        System.out.println(inventory.items);

    }
}

产量

[1, 2, 4, 7] // ascending
[7, 4, 2, 1] // descending since the compareTo method inverts the sign of the comparison result.
上一篇:如何使用Comparator对ArrayList进行排序?


下一篇:java – 如何使用Collections和Comparator按升序对ArrayList进行排序