首页 > 解决方案 > 对数组列表进行排序

问题描述

我正在尝试对具有包含整数和字母的字符串的列表数组进行排序,但是当我以常规方式执行此操作时,我会得到一些奇怪的输出:相关代码:

List<String> words = new ArrayList<>();  
words.add("9 hello");
words.add("98 food");
words.add("105 cat");
words.add("2514 human");
words.add("3 pencil");
words.sort(Comparator.reverseOrder());

我期待:

"2514 human"
"105 cat"
"98 food"
"9 hello"
"3 pencil"

但我得到这样的东西:

"98 food"
"9 hello"
"3 pencil"
"2514 human"
"105 cat"

有什么建议么?

标签: javaarraylist

解决方案


您需要有一个自定义比较器来满足您的要求。Java 8 解决方案:

List<String> words = new ArrayList<>();  
words.add("9 hello");
words.add("98 food");
words.add("105 cat");
words.add("2514 human");
words.add("3 pencil");

// Sort the existing list
words.sort(Comparator.comparing(s -> Integer.parseInt(s.split(" ")[0]), Comparator.reverseOrder()));

// To create new sorted list
List<String> sortedWords = words.stream()
            .sorted(Comparator.comparing(s -> Integer.parseInt(s.split(" ")[0]), Comparator.reverseOrder()))
            .collect(Collectors.toList());

推荐阅读