[英]What is the use of Comparator.comparing in respect to Comparator
[英]Struggling with the use of a Comparator
情況:我有一個對象的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文檔,發現應該使用Comparator。 問題是我實際上並不了解如何將比較器代碼實現到for循環中。 有什么建議么 ?
PS:很抱歉,如果這個問題看起來很簡單,但我還是個初學者,我很容易感到困惑:(
考慮到getItemName()
返回一個字符串,請將其添加到循環之前:
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());
}
});
在打印收藏集之前 ,您可以執行以下操作:
Collections.sort(itemsList, new Comparator<ShopItem>() {
public int compare(ShopItem i1, ShopItem i2) {
return i1.getItemName().compareTo(i2.getItemName());
}
});
在這里,我使用了Comparator
接口的匿名實現 。
您需要創建一個實現Comparator
的類(或一個匿名類)。 您已經在Comparator.compare文檔中對此進行了很好的解釋。
那就是公認答案中描述的方法。
我仍然想發布Java 8方法:
itemsList
.stream()
.sorted(Comparator.comparing(ShopItem::getItemName))
.forEach(item -> {
item.printDetails();
System.out.println();
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.