我是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.