使用Java8的parallelStream()新特性根据某个属性过滤数据
在实际开发中,我们经常要处理很多list数据,比如快速过滤、去重等等操作,在这里,隔壁大叔记录下使用Java8的parallelStream流来过滤数据,并且去重,注意啦,又是一个小细节###
首先拿到需要处理的数据
String customer = '隔壁大叔'
List<Order> orders = this.orderMapper.getAllOrder();
/**
*新特性1,根据属性与某个值比对,过滤出想要的数据
*在这里,比如我是根据客户去过滤出一批数据“隔壁大叔”这个客户的订单
**/
List<Order> filterByAttrOrders = orders .parallelStream().filter(order-> order.getCustomerName().equals(customer )).collect(Collectors.toList());
/**
*这里顺便记录一个,根据某个属性过滤去重的小技巧
*注意下面有个distinctByKey方法(也可以抽离出来写在common模块)
**/
List<Order> filterDistinctByAttr = orders .parallelStream().filter(distinctByKey(Order::getCustomerId)).collect(Collectors.toList());
/**
*这个方法可以直接拿去用
**/
private static <T> Predicate<T> distinctByKey(Function<? super T, Object> keyExtractor) {
Map<Object, Boolean> seen = new ConcurrentHashMap<>();
return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}
注意,我这里是使用的parallelStream(),而不是stream(),两者是有区别的,具体区别可以网上看看,很多资料,加油,打工人&&&&