簡體   English   中英

按每個字符串中的最后一個單詞迭代並按字母順序排列字符串的ArrayList

[英]Iterate and Alphabetize ArrayList of Strings by Last Word in Each String

我嘗試了許多解決方案,並且在這里確實很掙扎。

我有一個充滿字符串的數組列表,長度不等。

我需要按每個字符串中的最后一個單詞按字母順序對字符串進行排序。

有些字符串輸入為“未知”,而另一些則是多個單詞。

例:

static List<String> authors = new ArrayList<>();
authors.add("Unknown");
authors.add("Hodor");
authors.add("Jon Snow");
authors.add("Sir Jamie Lannister");
sort(authors);
System.out.println(authors);

應該返回:

Hodor
Sir Jamie Lannister
Jon Snow
Unknown    

如何按每個字符串中的姓氏/單詞迭代此列表?

非常感謝您的任何建議。 在此期間,我將繼續使用Google。

您可以提供一個自定義的Comparator<String>並調用Collections.sort(List<T>, Comparator<T>) ,例如

List<String> authors = new ArrayList<>(Arrays.asList("Unknown", "Hodor", "Jon Snow",
        "Sir Jamie Lannister"));
Collections.sort(authors, new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
        String[] left = o1.split("\\s+");
        String[] right = o2.split("\\s+");
        return left[left.length - 1].compareTo(right[right.length - 1]);
    }
});
System.out.println(authors);

哪些輸出(根據要求)

[Hodor, Sir Jamie Lannister, Jon Snow, Unknown]

在Java 8中,這可能有效

public void sort(List<String> authors) {
    Collections.sort((l, r) -> lastWord(l).compareTo(lastWord(r); )
}

public String lastWord(String str) {
    return str.substring(str.lastIndexOf(' ') + 1);
}

暫無
暫無

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

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