jdk1.8 stream例子

JDK8 Stream 详细使用 JDK8 管道 Stream 详细使用介绍   Stream 的获取 ① 通过集合Collection获取 List<Integer> list = new ArrayList<Integer>(Arrays.asList(1,2,3,4,5)); Stream<Integer> stream = list.stream(); ② 通过数组获取 ... 阅读详情

1.分组求和1

@Override
    public void validStock(List<GoodsStockDO> goodsStockDOS, GoodsStockQueryReqDTO queryReqDTO) {
        if (CollectionUtil.isEmpty(goodsStockDOS)) {
            return;
        }
        // 先根据网点和仓库分组
        final Map<Long, List<GoodsStockDO>> collect = goodsStockDOS.stream().collect(Collectors.groupingBy(e ->
                e.getShopId() + '-' + e.getWareId()
        ));
        // 根据每组内的list对库存件数和库存金重进行求和
        final List<GoodsStockDO> collect1 = collect.entrySet().stream().map(e ->
                e.getValue().get(0)
                        .setStockNum(e.getValue().stream().mapToInt(GoodsStockDO::getStockNum).sum())
                        .setGoldWeight(e.getValue().stream().map(GoodsStockDO::getGoldWeight).reduce(INIT_BIG_DECIMAL, BigDecimal::add))
        ).collect(Collectors.toList());
    }

2.改进:分组求和2

    @Override
    public void validStock(List<GoodsStockDO> goodsStockDOS, GoodsStockQueryReqDTO queryReqDTO) {
        if (CollectionUtil.isEmpty(goodsStockDOS)) {
            return;
        }
        final Map<Long, GoodsStockDO> skuAndStockDOS = goodsStockDOS.stream().collect(
                Collectors.toMap(GoodsStockDO::getSkuId, Function.identity(), (prev, cur) -> {
                    final GoodsStockDO goodsStockDO = new GoodsStockDO();
                    goodsStockDO.setStockNum(prev.getStockNum() + cur.getStockNum());
                    goodsStockDO.setGoldWeight(prev.getGoldWeight().add(cur.getGoldWeight()));
                    return goodsStockDO;
                }));
        final List<GoodsStockDO> goodsStockListByDTO = this.goodsStockMapper.getGoodsStockListByDTO(queryReqDTO);
        goodsStockListByDTO.forEach(e -> {
            final GoodsStockDO goodsStockDO = skuAndStockDOS.get(e.getSkuId());
            AssertUtil.isTrue(ObjectUtil.isNull(goodsStockDO), String.format("款式[%s]在库存中不存在!", e.getSkuNo()));
        });
    }

3.多条件分组后value转set集合

// 生成委外订单的key与明细值
        final Map<String, Set<String>> groupAndSkuResp = skuListBySkuNos.stream().collect(Collectors.groupingBy(e ->
                        e.getSupplierId() + "," + e.getBigClassId() + "," + e.getTextureId()
                , Collectors.mapping(SkuRespVO::getSkuNo, Collectors.toSet())));

4. list集合中对象嵌套子集,对子集进行过滤分组

// 生成委外订单的key与明细值
        final Map<String, List<OutsourcingOrderDetailRespVO>> groupHeadAndDetails = demandOrderVOList.stream()
                .flatMap(demandOrder -> demandOrder.getDetailList().stream().map(detail ->
                        this.buildOutOrderDetail(demandOrder, detail)))
                .filter(e -> e.getOutsourcingNum() > 0)
                .collect(Collectors.groupingBy(e ->
                        e.getSupplierId() + "," + e.getBigClassId() + "," + e.getTextureId()));
                        
 // private OutsourcingOrderDetailRespVO buildOutOrderDetail

5.两层list转取里层list 【flatMap】

 final List<PackRespVO> packRespVOS = packRespVOList.stream().filter(e -> BizTypeEnum.SP_GOODS_PACK.getKey().equals(e.getBizType())).collect(Collectors.toList());
        if (CollectionUtil.isEmpty(packRespVOS)) {
            return MapUtil.empty();
        }
        final List<PackDetailRespVO> packDetailRespVOS = packRespVOS.stream().flatMap(e -> e.getDetailList().stream()).collect(Collectors.toList());

5.分组后取第一个 【collect】

final Map<String, PackDetailDO> collect = packDetailDOS.stream().collect(
                Collectors.toMap(PackDetailDO::getTrayNo, Function.identity(), (t1, t2) -> t1)
        );

6.分组后返回对象属性集合 【collect】

Map<Integer, List<Integer>> collect2 = collect.stream().collect(Collectors.toMap(EntryBillDetailDO::getDemandOrderId,
                entryBillDetailDO -> Collections.singletonList(entryBillDetailDO.getDemandOrderLineNum()), (valuePre, valueCurr) -> {
                    List<Integer> union = new ArrayList<>(valuePre);
                    union.addAll(valueCurr);
                    return union;
                }));

JDK8 Stream 数据流效率分析 JDK8 Stream 数据流效率分析   Stream 是Java SE 8类库中新增的关键抽象,它被定义于 java.util.stream (这个包里有若干流类型: Stream&lt;T&gt; 代表对象引用流,此外还有一系列特化流,如 IntStream,LongStream,DoubleStream等 ),Java 8 引入的的Stream主要用于取代部分Collection的操作... 阅读详情

相关推荐

JDK 1.8 新特性之Stream

流是 Java 8 的新成员,它允许你以声明式方式处理数据集合(通过查询语句来表达,而不是临时编写一个实现)。此外,流还可以透明地并行处理,你无需写任何多线程代码了!

fanxiaobin 4053

JDK 1.8 Stream Collectors groupingBy 例子

们将向您展示如何使用java 8 Stream Collectors 对列表分组,计数,求和和排序。 Group By, Count and Sort 1.1 Group by a List and display the total count of it.(按列表分组,并显示其总数) package com.mkyong.java8; import java.util.Arrays;...

cliper9768的博客 633

JDK8 Stream 效率如何?

这份《“java高分面试指南”-25分类227页1000+题50w+字解析》同样可分享给有需要的朋友,感兴趣的伙伴们可挑战一下自我,在不看答案解析的情况,测试测试自己的解题水平,这样也能达到事半功倍的效果!(好东西要大家一起看才香)《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!” />

A1867350的博客 1167

jdk1.8的stream简单-》到复杂的例子

public class Student { private String name; private Integer age; public Student() { super(); } public Student(String name, Integer age) { super(); this.name = name; this.age = age; } public ...

k_x_sh的博客 370

JDK8中stream处理数据常用例子

处理List数据的时候往往需要通过一个for循环或者while 循环。 在JDK8中引入了Stream,通过stream,可以便捷地处理List,并且减少比较多模版式的代码,在Stream中也可以使用lambda表达式。 直接demo foreach //简单foreach输出 List<Integer> list = buildList(1,2,3,4,6,7,8); list.stream().forEach(element -> { System.out.print(e

CrazyHSF的博客 735

JDK8系列之Stream API入门教程和示例

JDK8系列之Stream API入门教程和示例,在前面的章节的学习中,我们学习了jdk8的新特性,lambada表达式、方法引用、函数式接口等等,接着本博客继续JDK8的一个比较重要的特性,JDK8 Stream API

Nicky's blog 2510

JDK1.8-Stream流

JDK1.8——Stream流 获取流的三种方式 第一种是通过Collection接口的stream方法获取 //创建一个List集合对象 List<String> list = new ArrayList<>(); Stream<String> stream = list.stream(); 123 第二种是通过Collection接口的parallelStream方法获取一个并发流 //创建一个list集合 List<String> list = new

ZJMing_sir的博客 254

REST-meta-MDD Data总结

sMRI数据使用:nwc1、nwc2、nwc3(同样数据集相关论坛中有相关信息指向需要使用wc1、wc2、wc3)多方咨询与讨论后决定使用nwc数据,这里说明wc数据相对wc数据要大的多如wc1的大小为1.33GB,而nwc1的数据却有6.90GB。VBM文件:/REST-meta-MDD/Sharing/REST-meta-MDD-VBM- phase1 -Sharing.tar.gz。1、Excel中的表型信息:1-男,2-女;-9999或空白表示缺少数据。

2404_88295660的博客 1538

JDK1.8新特性Stream流式操作,简化遍历操作

一. 前言 随着Java的发展,越来越多的企业开始使用JDK1.8 版本。JDK1.8 是自 JDK1.5之后最重要的版本,这个版本包含语言、编译器、库、工具、JVM等方面的十多个新特性。本次文章将着重学习Stream。 Stream 是JDK1.8 中处理集合的关键抽象概念,Lambda 和 Stream 是JDK1.8新增的函数式编程最有亮点的特性了,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用Stream API 对集合数据进行操

Thinkingcao的专栏 1万+

AI量化投资开源平台——Qlib(微矿)的学习使用笔记(随缘更新)

Qlib 涵盖了量化投资的全过程,为用户的 AI 算法提供了高性能的底层基础架构,从框架设计上让用户可以更容易地应用 AI 算法来辅助解决量化投资的各个关键问题(例如 Alpha 预测,风险预测,市场动态性建模)。本文旨在记录一些面向初学者的基础内容。

in_void的博客 3133

SAP ABAP MIGO增强实战:自定义页签与字段的完整实现指南

本文详细介绍了SAP ABAP中MIGO增强的实战指南,包括自定义页签与字段的完整实现步骤。通过BADI增强技术,开发者可以快速满足企业个性化需求,如添加供应商批次号等特殊字段。文章涵盖数据存储结构设计、BADI框架实现、核心方法编写及数据持久化方案,帮助用户高效完成MIGO屏幕增强开发。

study的专栏 774

对比jdk1.8,看jdk24 Stream Gatherers牛逼在哪?

JDK 1.8 的 Stream API 提供了一组固定的中间操作,开发者若需实现自定义逻辑,往往需要使用状态化的 lambda 表达式或外部库,这通常导致代码复杂且难以维护。Stream Gatherers 引入了 gather 方法,接受一个 Gatherer 对象。Gatherer 类似于 Collector,但用于中间操作而非终端操作。

学Java,找哪吒 1650

ESP32学习笔记03-日志打印

日志分为5个等级。

Car12 1415

JDK1.8新增的Stream的使用及原理

可以说函数式编程,Lambda 和 Stream 是JDK1.8新增的最有亮点的特性了。在学习Apache Flink 的时候,经常遇到算子运算,其实这就是一种最常用的Stream流编程运算,今天就来研究一下Java 的JDK1.8提供的Stream流式编程,以便对后续学习Flink和Spark还有Strom这些流式和批式处理框架有所帮助。 新的java.util.stream包...

leehsiao的专栏 1万+

【网络安全 | 渗透工具】Hydra安装使用详细教程

Hydra,也称九头蛇,是一款非常强大的暴力破解工具(密码能否被破解关键在于字典是否足够强大),支持多种服务协议的账号和密码进行爆破,包括Web登录、数据库、SSH、FTP等服务,支持Linux、Windows、Mac平台安装。该工具支持以下协议的爆破:Hydra在kali中自带,这里介绍windows下的安装方法。zip下载地址:https://gitcode.com/maaaaz/thc-hydra-windows/tree/master下载完成后解压: 再将thc-hydra-windows-mast

等风来 9201

openclaw通俗入门系列4——智能体工作区

工作区 = 智能体的家,存放它的性格、记忆、技能。默认不是牢笼(可以用沙箱隔离)。建议放到私有 Git 备份,但绝对不要提交密钥!

m0_60605453的博客 462

JDK8之lambda处理stream的常用例子

前言 在日常的编码中,我们经常要对集合类对象进行处理。JDK8之前,我们可能要用for循环等方式来处理集合中的每一个元素。不过JDK8的lambda表达式给了我们更方便的选择。 关于lambda表达式和stream的介绍,这里有一篇文章写得非常好,详细易懂。JDK 8 函数式编程入门 直接上demo 既然本文是要写一些常用的例子,那就直接上demo了。 1.先创建一个简单的实体类 @Data @B...

小白码上飞 2171

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

再次出发:JDK1.8新特性Stream

JDK1.8新特性Stream 相当于一个高级的iterator import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; import java.util.stream.Stream; /** * JDK1.8新特性St...

雷爷的博客 4241

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

JDK8-Stream总结【精简】

JDK8 Stream 流是 Java 8中引入的一个新特性,它提供了一种全新的处理集合的方式,使得代码更加简洁、易读、高效。 Stream 流的核心思想是将集合或数组转化为一个流,然后通过各种操作对其进行处理,最后得到一个新的流或结果。

wyh106115的博客 1316

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

JDK8新特性(一)集合之 Stream 流式操作

首先我们应该知道:Stream流的出现,主要是用在集合的操作上。在我们日常的工作中,经常需要对集合中的元素进行相关操作。诸如:增加、删除、获取元素、遍历。最典型的就是集合遍历了。接下来我们先举个例子来看看 JDK8 Stream流式操作出现之前,我们对集合操作的过程,从中来了解一下 JDK8 之前集合操作数据的弊端。Demo:现在有一个List集合,集合中有如下数据:"张无忌"、"周芷若"、"杨逍"、"张强"、"张三丰"、"赵敏"

weixin_58216062的博客 2749

JDK8新特性--Stream流详解

覆盖了Java 8中Stream流的基本概念、操作方法及其在并行处理中的应用. Stream流不同于传统的IO流,它是一种用于对数据进行加工处理的抽象概念,类似于工厂的生产流水线。通过介绍了获取Stream流的几种方式,包括从集合和数组获取流的方法。同时详细描述了Stream流的常用操作方法,如filter、map、sorted、distinct等,以及如何使用终结方法和非终结方法对流进行处理。此外,文中还涉及了如何收集Stream流中的结果到集合或数组中,以及并行Stream流的使用和效率对比

2401_85014515的博客 2408

JDK8语法糖stream()流式计算的使用例子

java stream()流失计算各种用法总结

WLQ0621的博客 1362

jdk1.8中stream练习

jdk1.8中stream练习 public class stream { public static void main(String[] args) { List<Student> students = initData(); //判断对象是否为空 // Student student = new Student(); // if(Optional.ofNullable(student).isPresent()){ //

qq_42303589的博客 278
上一篇: @Transactional失效场景/原因
下一篇: wf-docker集群搭建(未完结)
seeyoutlb
博客等级 码龄9年 123粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值