案例:我有一个对象的ArrayList,它有以下打印方法:
public void printAllItems()
{
if(itemsList.isEmpty())
{
System.out.println("The list is empty");
}
else
{
System.out.println("Number of items: " + itemCount);
for(ShopItem shopItem : itemsList)
{
shopItem.printDetails();
System.out.println(); // empty line between posts
}
}
}
现在我想按字母顺序对这些对象进行排序(itemName
,当然还有合适的getItemName()
方法)。我浏览了Java doc,发现我应该使用Comparator。问题是我实际上并没有理解如何将比较器代码实现到for循环中。有什么建议 ?
P.S。对不起,如果问题看起来非常简单,但我仍然是初学者,我很容易感到困惑:(
答案 0 :(得分:2)
考虑getItemName()
返回一个String,在循环之前添加:
Collections.sort(itemsList, new Comparator<ShopItem>(){
public int compare(ShopItem i1, ShopItem i2){
if(i1 == null || i2 == null)
return 0; //do properly nullable handling
return i1.getItemName().compareTo(i2.getItemName());
}
});
答案 1 :(得分:1)
在打印集合之前,您可以执行以下操作:
Collections.sort(itemsList, new Comparator<ShopItem>() {
public int compare(ShopItem i1, ShopItem i2) {
return i1.getItemName().compareTo(i2.getItemName());
}
});
我在这里使用Comparator
界面的匿名实现。
答案 2 :(得分:0)
您需要创建一个实现Comparator
(或匿名类)的类。您可以在Comparator.compare文档中详细说明。
这是接受的答案中描述的方法。
我还想发布Java 8方法:
itemsList
.stream()
.sorted(Comparator.comparing(ShopItem::getItemName))
.forEach(item -> {
item.printDetails();
System.out.println();
});