代码如下:
import com.alibaba.fastjson.JSONObject;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* list分组工具类
*
* T 实体需要实现toString方法,toString结果要为json字符串
*
* @date 20181204
* @author heatgemini
*/
public class DataGroupUtil {
/**
*
* @param list 原一层list
* @param groupKey 分组KEY
* @param <T>
* @return map
*/
public static <T> Map<String, List<T>> list2Map(List<T> list, String groupKey) {
Map<String, List<T>> resGroupMap = new LinkedHashMap<>();
for (T map : list) {
JSONObject json = JSONObject.parseObject(map.toString());
if(!json.containsKey(groupKey)){
continue;
}
String key = (String) json.get(groupKey);
if (!resGroupMap.containsKey(key)) {
List<T> listMap = new ArrayList<>();
listMap.add(map);
resGroupMap.put(key, listMap);
} else {
List<T> listMap = resGroupMap.get(key);
listMap.add(map);
resGroupMap.put(key, listMap);
}
}
return resGroupMap;
}
/**
* 分组list
* @param list
* @param groupKey 分组KEY
* @param <T>
* @return 两层list
*/
public static <T> List<JSONObject> list2GroupList(List<T> list, String groupKey){
Map<String, List<T>> dataMap = DataGroupUtil.list2Map(list, groupKey);
List<JSONObject> resList = new ArrayList<>();
for (String key : dataMap.keySet()) {
JSONObject resMap = new JSONObject();
resMap.put(groupKey, (T)key);
resMap.put("data", (T)dataMap.get(key));
resList.add(resMap);
}
return resList;
}
public static void main(String[] args) {
List<Account> accounts = new ArrayList<>();
Account account1 = new Account();
account1.setCreateMonth("2018-01");
account1.setAmount(BigDecimal.valueOf(11.11));
accounts.add(account1);
Account account2 = new Account();
account2.setAmount(BigDecimal.valueOf(22.22));
account2.setCreateMonth("2018-01");
accounts.add(account2);
Account account3 = new Account();
account3.setAmount(BigDecimal.valueOf(33.33));
account3.setCreateMonth("2018-02");
accounts.add(account3);
System.out.println("处理前数据:");
System.out.println(accounts);
System.out.println("处理后数据1:");
System.out.println(DataGroupUtil.list2Map(accounts, "createMonth"));
System.out.println("处理后数据2:");
System.out.println(DataGroupUtil.list2GroupList(accounts, "createMonth"));
}
}```
执行结果:
处理前数据:
[{“amount”:11.11,“createMonth”:“2018-01”},{“amount”:22.22,“createMonth”:“2018-01”},{“amount”:33.33,“createMonth”:“2018-02”}]
处理后数据1:
{2018-01=[{“amount”:11.11,“createMonth”:“2018-01”}, {“amount”:22.22,“createMonth”:“2018-01”}], 2018-02=[{“amount”:33.33,“createMonth”:“2018-02”}]}
处理后数据2:
[{“data”:[{“amount”:11.11,“createMonth”:“2018-01”},{“amount”:22.22,“createMonth”:“2018-01”}],“createMonth”:“2018-01”}, {“data”:[{“amount”:33.33,“createMonth”:“2018-02”}],“createMonth”:“2018-02”}]