0
点赞
收藏
分享

微信扫一扫

工具类系列---【List<Object>分组工具类】

guanguans 2022-06-01 阅读 123

使用场景:

把一个数组,按照某一属性分组,例如,学生数组按照age年龄分组,相同年龄的站到一起。

代码如下:(过时,更好的解决方案参考文章最下面的建议)

package com.byjk.finance.common;

import cn.hutool.core.collection.CollUtil;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Function;

/**
* 分组工具类
*
* @author hjw
* @since 2021年12月06日 10:46:00
*/
public class GroupUtil {

public static <T, R> Map<R, List<T>> groupData(List<T> list, Function<T, R> function) {

Map<R, List<T>> resultMap = new HashMap<>();
if (CollUtil.isNotEmpty(list)) {
for (T data : list) {
resultMap.computeIfAbsent(function.apply(data), k -> new ArrayList<>()).add(data);
}
}
return resultMap;
}
}

使用方法

把 fieldList数组,按照taxId分组,相同taxId的BusinessField放到一个List中。

Map<Long, List<BusinessField>> taxIdMap = GroupUtil.groupData(fieldList, BusinessField::getTaxId);

 建议:直接使用Stream流

Map<String, List<FinanceOutcome>> dataMap = list.parallelStream().collect(Collectors.groupingBy(FinanceOutcome::getPayType));

 

举报

相关推荐

0 条评论