ViewSMSOProfit类中有很多字段,现在要将List<ViewSMSOProfit> list 以Good,Mod,Ware和Doc来分组,并以Date来排序怎么写代码
时间: 2024-03-16 11:44:53 浏览: 56
java 中List按照date排序的实现
你可以使用 `Collectors.groupingBy` 方法对 `List<ViewSMSOProfit>` 进行分组,该方法接受一个 `Function` 类型的参数,该参数可以返回一个自定义的键(key)来进行分组。你可以将 `Good`、`Mod`、`Ware` 和 `Doc` 组合成一个键,然后按照该键进行分组。接着,你可以使用 `Comparator.comparing` 方法对 `List<ViewSMSOProfit>` 进行排序,该方法接受一个 `Function` 类型的参数,该参数可以返回一个自定义的排序属性。
假设 `ViewSMSOProfit` 类中有以下属性:
```java
public class ViewSMSOProfit {
private String good;
private String mod;
private String ware;
private String doc;
private Date date;
// 其他属性和方法
}
```
你可以按照如下代码对 `List<ViewSMSOProfit>` 进行分组和排序:
```java
List<ViewSMSOProfit> list = new ArrayList<>();
// 添加数据
Map<String, Map<String, Map<String, Map<String, List<ViewSMSOProfit>>>> groupedData = list.stream()
.collect(Collectors.groupingBy(item -> item.getGood() + item.getMod() + item.getWare() + item.getDoc(),
Collectors.groupingBy(ViewSMSOProfit::getDate, TreeMap::new,
Collectors.groupingBy(ViewSMSOProfit::getGood, TreeMap::new,
Collectors.groupingBy(ViewSMSOProfit::getMod, TreeMap::new,
Collectors.groupingBy(ViewSMSOProfit::getWare, TreeMap::new))))));
List<ViewSMSOProfit> sortedList = new ArrayList<>();
groupedData.values().forEach(docMap -> docMap.values().forEach(wareMap -> wareMap.values()
.forEach(modMap -> modMap.values().forEach(goodList -> sortedList.addAll(goodList)))));
sortedList.sort(Comparator.comparing(ViewSMSOProfit::getDate));
```
上述代码将会先按照 `Good`、`Mod`、`Ware` 和 `Doc` 字段分组,并将结果保存在一个嵌套的 `Map` 中。接着,我们遍历每个分组,按照 `Date` 字段进行排序,并将排序后的数据添加到一个列表中。
最终,你将得到一个按照 `Good`、`Mod`、`Ware`、`Doc` 和 `Date` 进行分组和排序的结果列表。
阅读全文