使用场景:
把一个数组,按照某一属性分组,例如,学生数组按照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));