对Map<String, TodayTradeInfoStatisDto>排序,根据TodayTradeInfoStatisDto类型的字段lev降序,字段sub降序
时间: 2024-03-02 10:50:05 浏览: 174
对map里面的value进行排序
对Map<String, TodayTradeInfoStatisDto>排序,根据TodayTradeInfoStatisDto类型的字段lev降序,字段sub降序,可以使用Java 8中的Stream和Lambda表达式来实现。具体步骤如下:
1. 将Map中的entrySet转换成Stream。
2. 使用sorted()方法对Stream进行排序,根据TodayTradeInfoStatisDto中的lev字段进行降序排序。
3. 如果lev字段相同,则根据sub字段进行降序排序。
4. 将排序后的结果转换成一个LinkedHashMap,保留原有的键值对顺序。
以下是一个示例代码:
```java
import java.util.*;
import java.util.stream.Collectors;
public class SortMapByValue {
public static void main(String[] args) {
Map<String, TodayTradeInfoStatisDto> map = new HashMap<>();
// 添加数据
map.put("key1", new TodayTradeInfoStatisDto(1, 2));
map.put("key2", new TodayTradeInfoStatisDto(1, 1));
map.put("key3", new TodayTradeInfoStatisDto(2, 3));
map.put("key4", new TodayTradeInfoStatisDto(2, 2));
map.put("key5", new TodayTradeInfoStatisDto(2, 1));
// 对Map进行排序
Map<String, TodayTradeInfoStatisDto> sortedMap = map.entrySet()
.stream()
.sorted(Map.Entry.<String, TodayTradeInfoStatisDto>comparingByValue()
.reversed()
.thenComparing((o1, o2) -> Integer.compare(o2.getSub(), o1.getSub())))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, LinkedHashMap::new));
// 输出排序后的结果
System.out.println(sortedMap);
}
}
class TodayTradeInfoStatisDto {
private int lev;
private int sub;
public TodayTradeInfoStatisDto(int lev, int sub) {
this.lev = lev;
this.sub = sub;
}
public int getLev() {
return lev;
}
public int getSub() {
return sub;
}
@Override
public String toString() {
return "TodayTradeInfoStatisDto{" +
"lev=" + lev +
", sub=" + sub +
'}';
}
}
```
在这个示例中,我们首先创建了一个Map,并添加了一些数据。然后使用Java 8中的Stream和Lambda表达式对Map进行排序,根据TodayTradeInfoStatisDto中的lev字段进行降序排序,如果lev字段相同,则根据sub字段进行降序排序。最后将排序后的结果转换成一个LinkedHashMap,保留原有的键值对顺序。
阅读全文