通过每个字符串中的最后一个字来迭代和按字母顺序排列字符串的ArrayList

时间:2016-09-20 00:51:00

标签: java string sorting arraylist iterator

我尝试了很多解决方案,而且我在这里真的很挣扎。

我有一个充满字符串的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    

如何按每个字符串中的姓氏/单词重复此列表排序?

非常感谢任何建议。在此期间我会继续谷歌。

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分: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);
}