簡體   English   中英

Java,按自定義alpha順序排序arraylist

[英]Java, sort arraylist by custom alpha order

讓我說我有

arrayList<String> fruits

包含

{"banana", "apple", "grape", "banana", "banana", "grape"}

我知道如何使用比較器(如下)按字母順序對它們進行排序:

Collections.sort(fruits, new Comparator<Fruit>() {
        public int compare(Fruit o1, Fruit o2) {
            return o1.getName().compareTo(o2.getName());
        }
    });

然而,這將給我{“蘋果”,“香蕉”,“香蕉”,“香蕉”,“葡萄”,“葡萄”}。 我怎么改變這個,所以我先把所有的香蕉,然后是蘋果,然后是葡萄? 謝謝!

這可能有助於您入門:

List<String> fruitsOrder = Arrays.asList(new String[]{"banana","apple","grape"});
Comparator<String> c = Comparator.comparingInt(str -> fruitsOrder.indexOf(str));

您可以通過規范化大小寫和/或使用Comparator.thenComparing進一步優化它,以使得不在列表中的水果具有一致的順序。

您可以先創建自定義比較器,如下所示:

public static class CustomFruitComparator implements Comparator<String> {

    Map<String, Integer> fruitsOrder;

    public CustomFruitComparator(Map<String, Integer> fruitsOrder) {
        this.fruitsOrder = fruitsOrder;
    }

    @Override
    public int compare(String o1, String o2) {
        if (fruitsOrder.get(o1) > fruitsOrder.get(o2))
            return 1;
        else if (fruitsOrder.get(o1) < fruitsOrder.get(o2))
            return -1;
        return 0;
    }

}

然后您可以使用它來對您的收藏進行排序。 在你的情況下,你可以這樣做:

List<String> fruits = Arrays.asList(new String[]{"banana", "apple", "grape", "banana", "banana", "grape"});

    Map<String, Integer> fruitsOrder = new HashMap<>();
    fruitsOrder.put("banana", 1);
    fruitsOrder.put("apple", 2);
    fruitsOrder.put("grape", 3);

    Collections.sort(fruits, new CustomFruitComparator(fruitsOrder));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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