基于JAVA8的集合操作工具类

1. 说明

        在此记录,一些基于java8集合操作的工具类实现方式,在此提供一些思路,具体实现方式,还需根据个人实际使用习惯来定。

1. 0 示例类 CustomerInfo
@Data
public static class CustomerInfo {/*** 客户代码*/private String customerNo;/*** 客户名称*/private String customerName;/*** 状态:有效 无效*/private String status;/*** 金额*/private BigDecimal money;}
1.1 数据过滤
// 从list中过滤所有有效状态的数据
List filterList = CollectionUtils.filter(list, vo -> "有效".equals(vo.getStatus()));/*** 数据过滤* @param list 原集合* @param predicate 条件* @param * @return 返回过滤后的集合*/
public static List filter(List list, Predicate predicate) {if (list == null) {return new ArrayList<>();}return list.stream().filter(predicate).collect(Collectors.toList());
}
1.2 数据过滤 取得数量
// 从list中过滤,所有有效状态数据的数量
int count = CollectionUtils.filterCount(list, vo -> "有效".equals(vo.getStatus()));/*** 数据过滤 取得数量* @param list 原集合* @param predicate 条件* @param * @return 返回过滤后的集合中元素数量*/
public static int filterCount(List list, Predicate predicate) {if (list == null) {return 0;}return list.stream().filter(predicate).collect(Collectors.toList()).size();
}
1.3 找到集合中第一个满足条件的数据
// 找到第一个有效的数据,没有找到为null
CustomerInfo customerInfo = CollectionUtils.find(buttonList, vo -> "有效".equals(vo.getStatus()));/*** 查找第一个* * @param list 需要查找的集合* @param predicate 条件* @param  找不到=null;找到=T* @return*/
public static T find(List list, Predicate predicate) {if (null == list) {return null;}List findList = filter(list, predicate);return findList.size() == 0 ? null : findList.get(0);
}
1.4 集合分组
// 根据客户代码进行分组
Map customerMap = CollectionUtils.group(list, vo -> vo.getCustomerNo());/*** list分组* * @param list 原集合* @param classifier 分组条件* @param  原集合中的对象* @param  map的key* @return*/
public static Map> group(List list, Function classifier) {if (list == null) {return new HashMap<>();}return list.stream().collect(Collectors.groupingBy(classifier));
}
1.5 集合中金额求和
// 求和
BigDecimal moneyTotal = CollectionUtils.sum(list, vo -> vo.getMoney());/*** 求和 BigDecimal* * @param list 原集合* @param function 条件* @param  原集合对象* @return*/
public static BigDecimal sum(List list, Function function) {return list.stream().map(function).reduce(BigDecimal.ZERO, BigDecimal::add);
}
1.6 list转map
// list转map
Map moneyTotal = CollectionUtils.toMap(list, vo -> vo.getCustomerNo());/*** list转map* * @param list 原集合* @param keyMapper 条件* @param  原集合中的对象* @param  新集合中的对象* @return*/
public static Map toMap(List list, Function keyMapper) {if (list == null) {return new HashMap<>();}return list.stream().collect(Collectors.toMap(keyMapper, item -> item, (v1, v2)->v1));
}
 1.7 list中取出某一个字段,转为新list2
// list中取出某一个字段,转为新list2
List customerNoList = CollectionUtils.toFiledList(list, vo -> vo.getCustomerNo());/*** list中的字段转新list2* * @param list 原集合* @param keyMapper 条件* @param  原集合中的对象* @param  新集合中的对象* @return*/
public static List toFiledList(List list, Function keyMapper) {if (list == null) {return new ArrayList<>();}return list.stream().map(keyMapper).collect(Collectors.toList());
}
  1.8 list中取出某一个字段,转为新set2
// list中取出某一个字段,转为新set2
Set customerNoSet = CollectionUtils.toFiledSet(list, vo -> vo.getCustomerNo());/*** llist中的字段转新set2* * @param list 原集合* @param keyMapper 条件* @param  原集合中的对象* @param  新集合中的对象* @return*/
public static Set toFiledSet(List list, Function keyMapper) {if (list == null) {return new HashSet<>();}return list.stream().map(keyMapper).collect(Collectors.toSet());
}

2. 完整代码 


import java.math.BigDecimal;
import java.util.*;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;/*** 工具類 集合操作*/
public class CollectionUtils {/*** 数据过滤*/public static List filter(List list, Predicate predicate) {if (list == null) {return new ArrayList<>();}return list.stream().filter(predicate).collect(Collectors.toList());}/*** 数据过滤 取得数量*/public static int filterCount(List list, Predicate predicate) {if (list == null) {return 0;}return list.stream().filter(predicate).collect(Collectors.toList()).size();}/*** 查找第一个* 找不到=null;找到=T*/public static T find(List list, Predicate predicate) {List findList = filter(list, predicate);return findList.size() == 0 ? null : findList.get(0);}/*** 查找第一个 指定开始位置和结束位置* 找不到=null;找到=T*/public static T find(List list, int start, int end, Predicate predicate) {if (null == list) {return null;}List subList = list.subList(start, end);List findList = filter(subList, predicate);return findList.size() == 0 ? null : findList.get(0);}/*** list分组*/public static Map> group(List list, Function classifier) {if (list == null) {return new HashMap<>();}return list.stream().collect(Collectors.groupingBy(classifier));}/*** 求和 BigDecimal*/public static BigDecimal sum(List list, Function function) {return list.stream().map(function).reduce(BigDecimal.ZERO, BigDecimal::add);}/*** list转map*/public static Map toMap(List list, Function keyMapper) {if (list == null) {return new HashMap<>();}return list.stream().collect(Collectors.toMap(keyMapper, item -> item, (v1, v2)->v1));}/*** list中的字段转新list2*/public static List toFiledList(List list, Function keyMapper) {if (list == null) {return new ArrayList<>();}return list.stream().map(keyMapper).collect(Collectors.toList());}/*** list中的字段转新Set2*/public static Set toFiledSet(List list, Function keyMapper) {if (list == null) {return new HashSet<>();}return list.stream().map(keyMapper).collect(Collectors.toSet());}/*** list中字段值最小*/public static K min(List list, Function keyMapper, CommonUtils.FunctionArgs funArgs) {if (list == null || list.size() == 0) {return null;}List klist = toFiledList(list, keyMapper);K min = null;for (K k : klist) {if (min == null) {min = k;}if (funArgs.apply(k, min)) {min = k;}}return min;}
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部