JDK8-2-流(3)- 流操作(2)

002-JDK8流的使用 【代码】002-JDK8流的使用。 阅读详情

JDK8-2-流(3)- 流操作(2)

关联上篇:
JDK8-2-流(2)- 流操作

连接字符串 java.util.stream.Collectors.joining

import static java.util.stream.Collectors.joining;

public class JoinTest {
    public static final List<Dish> menu = Arrays.asList(
            new Dish("pork", false, 800, Dish.Type.MEAT),
            new Dish("beef", false, 700, Dish.Type.MEAT),
            new Dish("chicken", false, 400, Dish.Type.MEAT));

    public static void joinTest() {
        String shortMenu = menu.stream()
                .map(Dish::getName)
                .collect(joining(",", "[", "]"));
        System.out.println(shortMenu);
    }

    public static void main(String[] args) {
        joinTest();
    }
}

结果:

[pork,beef,chicken]

分组

Map<String, List<Integer>> map = Arrays.asList(1, 2, 3, 4, 5)
        .stream()
        .collect(Collectors.groupingBy(i -> i % 2 == 0 ? "偶数" : "奇数"));
System.out.println(map);

结果:

{偶数=[2, 4], 奇数=[1, 3, 5]}

多级分组

public static void groupByTest2() {
    final List<Dish> menu = Arrays.asList(
            new Dish("pork", false, 800, Dish.Type.MEAT),
            new Dish("pork", false, 800, Dish.Type.MEAT),
            new Dish("beef", false, 700, Dish.Type.MEAT),
            new Dish("chicken", false, 400, Dish.Type.MEAT),
            new Dish("french fries", true, 530, Dish.Type.OTHER),
            new Dish("rice", true, 350, Dish.Type.OTHER),
            //季节水果
            new Dish("season fruit", true, 120, Dish.Type.OTHER),
            new Dish("pizza", true, 550, Dish.Type.OTHER),
            //虾
            new Dish("prawns", false, 300, Dish.Type.FISH),
            //鲑鱼,三文鱼,
            new Dish("salmon", false, 450, Dish.Type.FISH));
    Map<Dish.Type, Map<String, List<Dish>>> map = menu.stream()
            .collect(Collectors.groupingBy(dish -> dish.getType(), Collectors.groupingBy(dish ->
                    dish.getCalories() < 400 ? "低卡路里" : "高卡路里")));
    System.out.println(map);
}
{FISH={低卡路里=[Dish{name='prawns', vegetarian=false, calories=300, type=FISH}], 高卡路里=[Dish{name='salmon', vegetarian=false, calories=450, type=FISH}]}, OTHER={低卡路里=[Dish{name='rice', vegetarian=true, calories=350, type=OTHER}, Dish{name='season fruit', vegetarian=true, calories=120, type=OTHER}], 高卡路里=[Dish{name='french fries', vegetarian=true, calories=530, type=OTHER}, Dish{name='pizza', vegetarian=true, calories=550, type=OTHER}]}, MEAT={高卡路里=[Dish{name='pork', vegetarian=false, calories=800, type=MEAT}, Dish{name='pork', vegetarian=false, calories=800, type=MEAT}, Dish{name='beef', vegetarian=false, calories=700, type=MEAT}, Dish{name='chicken', vegetarian=false, calories=400, type=MEAT}]}}

按子组收集数据

例如筛选每种类型菜肴中最高卡路里的菜肴

Map<Dish.Type, Optional<Dish>> map = menu.stream()
        .collect(Collectors.groupingBy(Dish::getType,
                Collectors.maxBy(Comparator.comparing(Dish::getCalories))));
System.out.println(map);
{OTHER=Optional[Dish{name='pizza', vegetarian=true, calories=550, type=OTHER}], MEAT=Optional[Dish{name='pork', vegetarian=false, calories=800, type=MEAT}], FISH=Optional[Dish{name='salmon', vegetarian=false, calories=450, type=FISH}]}

Collectors.collectingAndThen 把收集器的结果转换为另一种类型

上例中,返回的 value 为 Optional 类型,如下转换成 Dish 类型:

Map<Dish.Type, Dish> map = menu.stream()
        .collect(Collectors.groupingBy(Dish::getType,
                Collectors.collectingAndThen(
                        Collectors.maxBy(Comparator.comparing(Dish::getCalories)),
                        Optional::get)
        ));
System.out.println(map);
{FISH=Dish{name='salmon', vegetarian=false, calories=450, type=FISH}, OTHER=Dish{name='pizza', vegetarian=true, calories=550, type=OTHER}, MEAT=Dish{name='pork', vegetarian=false, calories=800, type=MEAT}}

。。。待续

JDK8新特性之Stream流02 首先,java.util.Collection接口中加入了default方法 stream 用来获取流,所以其所有实现类均可获取流。所有的Collection集合都可以通过stram默认方法获取流。java.util.stream.Stream 是JDK 8新加入的流接口。1.通过Collection接口中的默认方法Stream stream()Stream接口的静态方法of可以获取相对应的流。方式2:Stream中的静态方法of获取流。掌握Stream中的静态方法of获取流。 阅读详情

相关推荐

JDK8新特性之Stream流03

到集合中:Collectors.toList()/Collectors.toSet()/Collectors.toCollection()聚合计算:Collectors.maxBy()/Collectors.minBy/Collectors.counting/获取并行流有两种方式: 直接获取并行流: parallelStream() 将串行流转成并行流: parallel(), Set> toSet():转换为Set集合。对流操作完成之后,如果需要将流的结果保存到数组或这集合中,可以收集流中的数据。

weixin_52821030的博客 1116

JDK8-2-流(2.3)- 流操作-reduce (归约)

reduce 可以把一个流中的元素组合起来,例如可以计算一组数的总和。

sql2008help的博客 261

手把手搭建摄像头驱动(一):I2C设备树插件与OV5640实战

本文手把手指导如何搭建OV5640摄像头驱动,重点讲解I2C设备树插件的编写与实战应用。通过硬件连接验证、I2C驱动框架搭建、设备树插件编译及动态加载调试,系统介绍Linux驱动开发全流程,并提供常见问题解决方案,帮助开发者快速掌握摄像头驱动开发技术。

git9versioner的博客 754

3.1_26 JavaSE-JDK8新特性 P2 【Stream流-操作集合】

1.简介 2.创建流 3.中间操作 4.终结操作 5.高级用法 6.idea调试Stream流

GroupiesM的博客 646

NAO V6 开发环境的配置(附所有文件)

NAO V6开发环境配置前言环境Robot SettingsChoregraphe 2.8.5.10python2.7+naoqi2.8+opencv4.1.0putty与FileZilla 前言 学校的机器人摸索了一段时间,之前摸爬滚打探索环境,之前没接触这类机器人可能会非常艰辛,希望能给需要的人一些帮助。Nao与pepper通用 环境 win10(x64)+naoqi2.8 1、Robot S...

wbhhello的博客 3217

线上专利申请(超详细)| 签名确认

在【法人登录】页面点击【证书登录】按钮,弹出证书登录提示框,点击【确 认】按钮,进入到输入证书密码页面,点击【取消】按钮,取消本次操作。企业在提交申请时,需要增加签名,如使用企业账户点击提交,会弹出“法人、代理机构不能签名,请使用经办人签名”,这个时候就需要换个账号了。在需要签名时,将专利官网的登录方式点击法人登录,选择扫码登录,使用移动端经办人账户的扫一扫功能扫描登录。登录完成后,再点击签名,使用移动端扫一扫功能,扫描签名,输入证书号,确认签名,并提交。最后,祝大家的申请都成功!

weixin_62112323的博客 9107

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

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

扛麻袋的少年的博客 1万+

Synopsys AXI VIP 从环境搭建到首个验证场景运行

本文详细介绍了Synopsys AXI VIP从环境搭建到首个验证场景运行的全过程,包括VIP安装、示例工程生成、验证环境解析、仿真调试技巧及进阶优化。特别针对AXI协议验证中的常见问题提供了实用解决方案,帮助工程师快速掌握这一SoC验证必备工具。

weixin_29185493的博客 340

JDK8-2-流(2)- 流操作

上篇中简单介绍了什么是流以及使用流的好处,本篇主要介绍流的操作类型以及如何操作。

sql2008help的博客 413

离合器KP点自学习:从原理到工程实践的全景解析

本文全面解析了离合器KP点自学习的原理与工程实践,详细介绍了KP点的物理本质、控制价值及自学习方法。通过扭矩增量式和转速变化式学习法,结合不同变速箱构型的适配策略,提升离合器控制的精度与效率。文章还探讨了液压系统迟滞补偿和摩擦材料老化应对方案,为工程实践提供可靠保障。

weixin_33717117的博客 284

JavaScript高级程序设计

作者:禅与计算机程序设计艺术 1.简介 JavaScript(简称JS)是一种直截了当、简单易用的动态脚本语言。它最初由Netscape公司的Brendan Eich(布兰登·艾奇)于1995年创建,但后来逐渐成为事实上的通用编程语言。目前,JS已经成为世界上最流行的客户端脚本语言,广泛用于网页开发、移

AI天才研究院 2263

JDK8新特性-Stream流

JDK8新特性-Stream流,本教程附有非常多的例子,看完肯定能懂Stream流!

Yyyy的博客 4211

《电磁兼容设计》专栏说明

本专栏自2024年1月起开始更新,仅设此一个电磁兼容相关知识专栏,并将一直持续更新下去,无期限

linkking27的博客 790

JDK8新特性--Stream流详解

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

2401_85014515的博客 2408

ADRC自抗扰PD+ESO控制(博途SCL源代码)

文章浏览阅读119次。线性自抗扰控制(LADRC)系统算法框图-优快云博客文章浏览阅读335次。NLADRC自抗扰控制从Simulink仿真到PLC控制实现_自抗扰控制器 simulink仿真-优快云博客本文介绍了如何将ADRC自抗扰控制算法从Simulink仿真应用到PLC控制中,包括Simulink框图、TD微分器模型、MATLAB函数的使用、SCL控制代码,以及非线性状态误差反馈控制率的实现。ADRC自抗扰PD+ESO控制(CODESYS测试+完整ST代码)-优快云博客。

RXXW_Dor的博客 1312

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

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

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

weixin_58216062的博客 2749

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

JDK8新特性之Stream流详解

JDK8新特性之Stream流式操作1 流概述 1 流概述   流是 JDK8 新增的成员,允许以声明性方式处理数据集合,可以把 Stream 流看作是遍历数据集合的一个高级迭代器   使用流的好处: 代码以声明性方式书写:说明想要完成什么,而不是说明如何完 成一个操作 可以把几个基础操作连接起来,来表达复杂的数据处理的流水 线,同时保持代码清晰可读   流是什么?   从支持数据处理操作的源生成...

ChengZi~ 2528

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

JAVA中JDK8新特性(Stream流)

JDK8以后才有的一个新特性,是专业用于对集合或者数组进行便捷操作的。有多方便呢?我们用一个案例体验一下,然后再详细学习。有一个List集合,元素有"张三丰","张无忌","周芷若","赵敏","张强",找出姓张,且是3个字的名字,存入到一个新集合中去。Collections.addAll(names, "张三丰","张无忌","周芷若","赵敏","张强");用传统方式来做,代码是这样的// 找出姓张,且是3个字的名字,存入到一个新集合中去。

2401_83377623的博客 1429

JDK 8新特性-Stream流

JDK 8新特性-Stream流

爱笑的boy的博客 710

JavaSE笔记(2.8)IO流与jdk1.8 Stream新特性

前言 后续学习到网络编程、并发编程,发现JavaSE中还有个Stream流没有系统的复习 流在jdk1.8之前是IO流,jdk1.8新添加了stream特性用于处理集合 这两者是不同的 目录 IO流 1.1. 分类 新特性:Stream Stream操作 3.1. 创建流 3.2. 中间操作 3.3. 结束操作 总结 IO流 jdk1.8之前就存在流,它属于IO包(java.io),用于数据...

key_768的博客 973

JDK8新特性之Steam流

Java 中,Stream 是一个来自java.util.stream包的接口,用于对集合(如List、Set等)或数组等数据源进行操作的一种抽象层。Stream流(和IO流没有任何关系)主要是对数据进行加工处理的。Stream API能让我们快速完成许多复杂的操作,如筛选、切片、映射、查找、去除重复,统计,匹配和归约。Stream常用方法方法名方法作用返回值类型防范种类count统计个数long终结forEach逐一处理void终结filter过滤Stream函数拼接。

PP东博客 939

JDK8,Stream流中map()函数进行数据转换

这段时间再学习JDK8的特性,感觉收获很多。今天来写一篇关于JDK8中Stream流的使用。 在下面的代码中,我想将numberList2集合中的数据进行转换,生成一个新的集合。 package com.stream.main; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class StreamTest7 { p...

dear_Alice_moon的专栏 2636

JDK8新特性关于Stream流的作用以及使用

JDK8新特性关于Stream流的作用以及使用 部分内容参考自:http://www.runoob.com/java/java8-streams.html Stream API是JDK8新添加的处理集合的关键组件,提供了多种的函数式操作。 ...

weixin_44553436的博客 6854

Jdk8中Stream流的使用,让你脱离for循环

学习要求:知道一点儿函数式接口和Lambda表达式的基础知识,有利于更好的学习。 1.先体验一下Stream的好处 需求:给你一个ArrayList用来保存学生的成绩,让你打印出其中大于60的成绩。 public static void main(String[] args) { ArrayList<Integer> arrList = new ArrayList&l...

小鱼吃猫 3760

Java基础之Stream流(JDK1.8新特性)

本文首先介绍了JDK1.8中的Stream流,Stream流是是一个来自数据源的元素队列并支持聚合操作。它的特点就是中间过程不会存储数据,不会改变数据源本身。接着介绍了stream的使用示例,stream流的使用一般是要结合函数式接口使用的。

码农飞哥 2967

jdk1.8新特性stream流简单操作

jdk1.8新特性stream流简单操作 1)过滤器使用: List<MsgUserAuthVO> authVOS = readVOs.stream().filter(t -> !userIds.contains(t.getUserId())).collect(Collectors.toList()); 解释:通过对readVOs进行stream...

weixin_40249888的博客 1169
上一篇: JDK8-2-流(2)- 流操作
下一篇: 对外接口签名生成方式
sql2008help
博客等级 码龄11年 80粉丝 145原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值