2016-09-20 18 views
0

我已經嘗試了很多解決方案,我真的在這裏苦苦掙扎。通過在每個字符串中的最後一個字的字符串迭代和Alphabetize ArrayList

我有一個長度不等的字符串列表。

我需要按字母順序排序每個字符串中的最後一個字。

某些字符串被輸入爲「未知」,而其他字符串是多個單詞。

例子:

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  

我如何可以遍歷這個列表中每個字符串姓氏/字排序?

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

回答

1

您可以提供自定義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] 
+0

無瑕。謝謝你的時間! – user1028872

1

在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); 
} 
相關問題