java - 对数组列表进行排序
问题描述
我正在尝试对具有包含整数和字母的字符串的列表数组进行排序,但是当我以常规方式执行此操作时,我会得到一些奇怪的输出:相关代码:
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"
有什么建议么?
解决方案
您需要有一个自定义比较器来满足您的要求。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());
推荐阅读
- android - 使用 Dagger 2 Scope 避免活动泄漏
- python-3.x - 这段代码中事件的作用是什么?
- tinymce - 项目目录中的 Tinymce 外部插件不起作用
- swift - 如何锁定 Xib 的高宽比?
- json - 带有特殊字符的 JSON 无法在 Nativescript Angular 中加载
- css - 将视频填充到屏幕高度和宽度的整个高度和宽度
- google-sheets - 是否可以获得从公式计算的范围?
- node.js - node.js REST API上的删除请求在邮递员而不是应用程序中工作正常
- ios - iOS - 获取当前的 AVPlayer(Item) 状态
- jekyll - Jekyll 服务在 localhost 中生成错误的路径