Collections.sort(slg, (o1,o2) -> { if (ObjectUtil.isNull(o1.get(10))||ObjectUtil.isNull(o2.get(10))) { return -1; } String s1 = o1.values().toArray()[10].toString().replaceAll("[^\\u4e00-\\u9fa5]", ""); String s2 = o2.values().toArray()[10].toString().replaceAll("[^\\u4e00-\\u9fa5]", ""); return s1.compareTo(s2); }); 优化这段代码
时间: 2024-01-31 16:02:14 浏览: 458
这段代码的主要作用是对一个 List<Map<String, Object>> 的数据进行排序,排序的依据是这个 Map 中第 10 个元素的字符串形式中的汉字。对于这段代码的优化有以下几点建议:
1. 使用 Lambda 表达式来进行 Comparator 的实现,可以简化代码。
2. 对于 Map 中第 10 个元素为 null 的情况,可以直接跳过比较,不需要返回 -1。
3. 对于字符串中的汉字提取,可以使用正则表达式来进行,不需要对字符串进行多次操作。
综上所述,可以优化成以下代码:
```java
Collections.sort(slg, (o1, o2) -> {
String s1 = extractChinese(o1.get(10));
String s2 = extractChinese(o2.get(10));
return s1.compareTo(s2);
});
private String extractChinese(Object obj) {
if (ObjectUtil.isNull(obj)) {
return "";
}
String str = obj.toString();
return str.replaceAll("[^\\u4e00-\\u9fa5]", "");
}
```
其中,`extractChinese` 方法是用来提取字符串中的汉字的方法,可以在排序时使用。
相关问题
Collections.sort(historyBeans,(o1,o2)-> (int) (o2.getDay_time()-o1.getDay_time()));
这段代码使用了 Java 8 的 Lambda 表达式,对一个 List<HistoryBean> 类型的集合进行排序。排序的依据是 HistoryBean 对象的 day_time 属性,按照从大到小的顺序进行排序。
Lambda 表达式的语法为 (o1, o2) -> (int) (o2.getDay_time() - o1.getDay_time()),其中 (o1, o2) 表示接收两个参数 o1 和 o2,-> 符号表示 Lambda 表达式的主体部分,即排序的比较逻辑,(int) (o2.getDay_time() - o1.getDay_time()) 表示将两个 HistoryBean 对象的 day_time 属性做差,并将结果转换为 int 类型。这个结果将作为 Collections.sort() 方法的返回值,用于判断两个对象的大小关系,从而实现排序功能。
Collections.sort(dayBeanList,(o1,o2)-> (int) (o1.getTimeSeconds()- o2.getTimeSeconds()));
这是使用Lambda表达式实现的排序。`Collections.sort()`是Java中的集合排序方法,它可以对一个集合进行排序。Lambda表达式`(o1,o2)-> (int) (o1.getTimeSeconds()- o2.getTimeSeconds())`则是用来指定排序的规则,它实际上是一个匿名函数,其中`o1`和`o2`是用来比较的两个对象,`o1.getTimeSeconds()- o2.getTimeSeconds()`则是根据`TimeSeconds`属性进行比较,并返回比较结果的整数值。这个整数值表示了两个对象的大小关系,如果返回值小于0,则`o1`应该排在`o2`的前面,如果返回值大于0,则`o1`应该排在`o2`的后面,如果返回值等于0,则`o1`和`o2`相等,排序不变。最终,`dayBeanList`集合会按照`TimeSeconds`属性从小到大的顺序进行排序。
阅读全文