使用Java8的parallelStream()新特性根据某个属性过滤数据

使用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(),两者是有区别的,具体区别可以网上看看,很多资料,加油,打工人&&&&

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值