当前位置: 首页 > 后端技术 > Java

Java8中对各种集合的Stream操作实例

时间:2023-04-02 01:55:58 Java

前言这篇文章是一个笔记...其实是专门给同事写的。他说他不会在Java8之后使用lambda操作。Java18已经出来了。你不熟悉Java8,这真是狗摇头抱怨不愿意接触新东西的人,你再火他也不愿意学~~函数式接口,泛型,断言(Predicate)、消费(Consumer)、提供者(Supplier)等,所以原理就不说了,直接写代码例子。..需要的时候直接复制粘贴,改实体类名就OK了。给定一个实体类@DatapublicclassReviewerRest{privateLongid;privateLongreviewerId;私人Bigdecimal价格;私人LocalDate日期;privateIntegerrest;}复制代码将对象集合转化为对象中的属性集合Listlist=newArrayList<>();Listids=list.stream().map(ReviewerRest::getId).collect(Collectors.toList());复制代码将一个属性的集合转换为对象集合();rest.setRest(1);rest.setDate(LocalDate.now());rest.setReviewerId(1000L);returnrest;}).collect(Collectors.toList());复制代码判断集合中是否存在包含某个属性的对象booleanexist=list.stream()。anyMatch(rest->rest.getReviewerId().equals(1000L));//......allMatch和anyMatch类似复制代码对集合中一个对象的属性求和BigDecimalreduce=list.stream().地图(ReviewerRest::getPrice).reduce(BigDecimal.ZERO,BigDecimal::add);复制代码集合到地图(常用)Mapmap=list.stream().collect(Collectors.toMap(ReviewerRest::getId,x->x));将代码集复制到Map中(key重复)。当集合中的id会重复时,上述方法会报错。这时候需要指定复制时使用哪个valueMapmap=list.stream().collect(Collectors.toMap(ReviewerRest::getId,x->x,(before,after)->后));复制代码集合到Map(valuehasnullvalue)当value有null值时,上述方法会报错。这时候需要换一种写法Mapmap=list.stream().collect(HashMap::new,(mapItem,item)->mapItem.put(item.getId(),item.getDate()),HashMap::putAll);复制代码集合分组到MapMap>map=list.stream().collect(Collectors.groupingBy(ReviewerRest::getId));复制代码集合分区到MapMap>map=list.stream().collect(Collectors.partitioningBy(r->r.getRest()==1));Copy统计代码收集组数Mapmap=list.stream().collect(Collectors.groupingBy(ReviewerRest::getId,Collectors.counting()));复制代码集合分组到某个属性集合Map>map=list。溪流()。收集(收集器。groupingBy(重新viewerRest::getId,Collectors.mapping(ReviewerRest::getRest,Collectors.toList())));复制代码集合分组聚合查询最大元素Map>map=list.stream().collect(Collectors.groupingBy(ReviewerRest::getReviewerId,Collectors.maxBy(Comparator.comparing(ReviewerRest::getDate))));复制代码集合分组聚合求和//目前只支持int,double,longMapmap=list.stream().collect(Collectors.groupingBy(ReviewerRest::getReviewerId,Collectors.summingLong(ReviewerRest::getRest)));复制代码flatMap获取嵌套集合的最小值给定一个数据结构,需要获取最里面billList的最小值到期日可以使用flatMapLocalDatemin=loanList.stream().flatMap(loan->loan.getBillList().stream()).map(CallStrategyPlanDetail.Bill::getDueDate).min(LocalDate::compareTo).orElseThrow();复制代码结论这篇文章没什么好说的,也不是一篇文章,让我们做个笔记。.以后有需要的就过来copy一下。。。暂时就想到这么多,以后要用到再更新~~