簡體   English   中英

努力使用比較器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM