Java Stream实战_函数式编程的新方式
1. 引言
1.1 Java Stream简介
- Stream是什么:Stream是Java 8引入的一个接口,用于处理集合数据。
- 与传统集合的区别:Stream不存储数据,而是通过管道操作(如过滤、映射)来处理数据。
- 主要特点:惰性求值、链式调用、函数式编程风格。
1.2 函数式编程基础
- 什么是函数式编程:一种编程范式,强调使用纯函数和不可变数据。
- Java中的函数式接口:如
Function,Predicate,Consumer等。 - Lambda表达式:简化匿名内部类的语法糖。
1.3 Stream API的历史背景和发展
- Java 8之前的集合处理方式:迭代器、增强for循环。
- Stream API的引入动机:提高代码可读性和性能。
- 后续版本的改进:如Java 9的流式文件处理、Java 10的局部变量类型推断等。
2. Stream 基础
2.1 创建Stream
-
从集合创建:
List.stream(),Set.stream()等。List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); Stream<String> stream = names.stream(); -
从数组创建:
Arrays.stream(array)。String[] namesArray = {"Alice", "Bob", "Charlie"}; Stream<String> streamFromArray = Arrays.stream(namesArray); -
使用静态方法创建:
Stream.of(),Stream.generate(),Stream.iterate()。Stream<String> streamOf = Stream.of("Alice", "Bob", "Charlie"); Stream<Integer> infiniteStream = Stream.iterate(0, n -> n + 1);
2.2 Stream操作类型
-
中间操作:如
filter,map,flatMap等,返回一个新的Stream。List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); Stream<String> filteredStream = names.stream().filter(name -> name.startsWith("A")); -
终止操作:如
forEach,collect,reduce等,执行计算并返回结果。List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); long count = names.stream().filter(name -> name.startsWith("A")).count();
3. 常用Stream操作
3.1 筛选与切片
-
filter:根据条件筛选元素。
List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); List<String> filteredNames = names.stream().filter(name -> name.startsWith("A")).collect(Collectors.toList()); -
limit:限制返回的元素数量。
List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); List<String> limitedNames = names.stream().limit(2).collect(Collectors.toList()); -
skip:跳过指定数量的元素。
List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); List<String> skippedNames = names.stream().skip(1).collect(Collectors.toList());
3.2 映射
-
map:将每个元素转换为另一个形式。
List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); List<Integer> nameLengths = names.stream().map(String::length).collect(Collectors.toList()); -
flatMap:将多个Stream合并为一个Stream。
List<List<String>> listOfLists = Arrays.asList(Arrays.<
相关文章:
Java Stream实战_函数式编程的新方式
1. 引言 1.1 Java Stream简介 Stream是什么:Stream是Java 8引入的一个接口,用于处理集合数据。与传统集合的区别:Stream不存储数据,而是通过管道操作(如过滤、映射)来处理数据。主要特点:惰性求值、链式调用、函数式编程风格。1.2 函数式编程基础 什么是函数式编程:一…...
java-(Oracle)-Oracle,plsqldev,Sql语法,Oracle函数
卸载好注册表,然后安装11g 每次在执行orderby的时候相当于是做了全排序,思考全排序的效率 会比较耗费系统的资源,因此选择在业务不太繁忙的时候进行 --给表添加注释 comment on table emp is 雇员表 --给列添加注释; comment on column emp.empno is 雇员工号;select empno,en…...
c++可变参数详解
目录 引言 库的基本功能 va_start 宏: va_arg 宏 va_end 宏 va_copy 宏 使用 处理可变参数代码 C11可变参数模板 基本概念 sizeof... 运算符 包扩展 引言 在C编程中,处理不确定数量的参数是一个常见的需求。为了支持这种需求,C标准库提供了 &…...
linux 函数 sem_init () 信号量、sem_destroy()
(1) (2) 代码举例: #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <semaphore.h> #include <unistd.h>sem_t semaphore;void* thread_function(void* arg) …...
基于python的体育新闻数据可视化及分析
项目 :北京冬奥会体育新闻数据可视化及分析 摘 要 随着社会的不断进步与发展,新时代下的网络媒体获取的信息也更加庞大和繁杂,相比于传统信息来源更加难以分析和辨别,造成了新时代媒体从业者撰写新闻的难度。在此背景下ÿ…...
CSS 基础:层叠、优先级与继承
CSS 基础:层叠、优先级与继承 一、层叠(Cascade)示例:层叠的顺序 二、优先级(Specificity)优先级规则示例:优先级的比较 三、继承(Inheritance)哪些属性会被继承…...
代码随想录算法【Day36】
Day36 1049. 最后一块石头的重量 II 思路 把石头尽可能分成两堆,这两堆重量如果相似,相撞后所剩的值就是最小值 若石头的总质量为sum,可以将问题转化为0-1背包问题,即给一个容量为sum/2的容器,如何尽量去凑满这个容…...
CNN的各种知识点(四): 非极大值抑制(Non-Maximum Suppression, NMS)
非极大值抑制(Non-Maximum Suppression, NMS) 1. 非极大值抑制(Non-Maximum Suppression, NMS)概念:算法步骤:具体例子:PyTorch实现: 总结: 1. 非极大值抑制(…...
为什么会有函数调用参数带标签的写法?Swift函数调用的参数传递需要加前缀是否是冗余?函数调用?函数参数?
为什么会有函数调用参数带标签的写法? ObjC函数参数形式与众不同,实参前会加前缀,尤其参数很多的情况,可读性很强。例如: [person setAge: 29 setSex:1 setClass: 35]; 这种参数前面加前缀描述也被叫标签(Label). 注意࿰…...
如可安装部署haproxy+keeyalived高可用集群
第一步,环境准备 服务 IP 描述 Keepalived vip Haproxy 负载均衡 主服务器 Rip:192..168.244.101 Vip:192.168.244.100 Keepalive主节点 Keepalive作为高可用 Haproxy作为4 或7层负载均衡 Keepalived vip Haproxy 负载均衡 备用服务…...
如何运行Composer安装PHP包 安装JWT库
1. 使用Composer Composer是PHP的依赖管理工具,它允许你轻松地安装和管理PHP包。对于JWT,你可以使用firebase/php-jwt这个库,这是由Firebase提供的官方库。 安装Composer(如果你还没有安装的话): 访问Co…...
安全策略配置
1.拓扑信息 2. 实验需求 3.需求分析 1.需要在交换机LSW1配置分配vlan并且为配置通道 2/3/4/5 在web界面或者命令行制定相应的安全策略 由于存在默认的拒绝需求4中生产区在任何时刻访问不了web不允许单独配置,只配置动作为运行的策略 4.配置信息 先配置服务器 …...
使用Chainlit快速构建一个对话式人工智能应用体验DeepSeek-R1
Chainlit是一个开源的 Python 包,用于构建可用于生产的对话式人工智能。 DeepSeek-R1 是一款强化学习(RL)驱动的推理模型,解决了模型中的重复性和可读性问题。在 RL 之前,DeepSeek-R1 引入了冷启动数据,进…...
Cursor 与多语言开发:全栈开发的利器
引言 全栈开发要求开发者跨越前端、后端、数据库甚至数据科学等多个技术领域,而不同技术栈往往需要切换工具和思维方式。Cursor 作为一款 AI 驱动的智能编程助手,凭借其对 20 编程语言 和主流框架的深度支持,正在成为全栈开发的“瑞士军刀”…...
生成式AI安全最佳实践 - 抵御OWASP Top 10攻击 (下)
今天小李哥将开启全新的技术分享系列,为大家介绍生成式AI的安全解决方案设计方法和最佳实践。近年来生成式 AI 安全市场正迅速发展。据IDC预测,到2025年全球 AI 安全解决方案市场规模将突破200亿美元,年复合增长率超过30%,而Gartn…...
家政预约小程序12服务详情
目录 1 修改数据源2 创建页面3 搭建轮播图4 搭建基本信息5 显示服务规格6 搭建服务描述7 设置过滤条件总结 我们已经在首页、分类页面显示了服务的列表信息,当点击服务的内容时候需要显示服务的详情信息,本篇介绍一下详情页功能的搭建。 1 修改数据源 在…...
知识蒸馏教程 Knowledge Distillation Tutorial
来自于:Knowledge Distillation Tutorial 将大模型蒸馏为小模型,可以节省计算资源,加快推理过程,更高效的运行。 使用CIFAR-10数据集 import torch import torch.nn as nn import torch.optim as optim import torchvision.tran…...
【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.29 NumPy+Scikit-learn(sklearn):机器学习基石揭秘
2.29 NumPyScikit-learn:机器学习基石揭秘 目录 #mermaid-svg-46l4lBcsNWrqVkRd {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-46l4lBcsNWrqVkRd .error-icon{fill:#552222;}#mermaid-svg-46l4lBcsNWr…...
DeepSeek-R1:通过强化学习提升大型语言模型推理能力的探索
DeepSeek-R1:通过强化学习提升大型语言模型推理能力的探索 在人工智能领域,大型语言模型(LLMs)的发展日新月异,其在自然语言处理和生成任务中的表现逐渐接近人类水平。然而,如何进一步提升这些模型的推理能…...
【C语言】指针详解:概念、类型与解引用
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C语言 文章目录 💯前言💯指针的基本概念1. 什么是指针2. 指针的基本操作 💯指针的类型1. 指针的大小2. 指针类型与所指向的数据类型3. 指针类型与数据访问的关系4. 指针类型的实际意…...
【怎么用系列】短视频戒断——对推荐算法进行干扰
如今推荐算法已经渗透到人们生活的方方面面,尤其是抖音等短视频核心就是推荐算法。 【短视频的危害】 1> 会让人变笨,慢慢让人丧失注意力与专注力 2> 让人丧失阅读长文的能力 3> 让人沉浸在一个又一个快感与嗨点当中。当我们刷短视频时&#x…...
【OS】AUTOSAR架构下的Interrupt详解(上篇)
目录 前言 正文 1.中断概念分析 1.1 中断处理API 1.2 中断级别 1.3 中断向量表 1.4 二类中断的嵌套 1.4.1概述 1.4.2激活 1.5一类中断 1.5.1一类中断的实现 1.5.2一类中断的嵌套 1.5.3在StartOS之前的1类ISR 1.5.4使用1类中断时的注意事项 1.6中断源的初始化 1.…...
UE编辑器工具
如何自己制作UE小工具提高工作效率 在虚幻编辑器用户界面中,可以使用各种各样的可视化工具来设置项目,设计和构建关卡,创建游戏性交互等等。但有些时候,当你确定了需要编辑器执行的操作后,可能想要通过编程方式调用它…...
【Linux】25.进程信号(2)
文章目录 4.捕捉信号4.1 重谈地址空间4.2 内核如何实现信号的捕捉4.3 sigaction4.4 可重入函数4.5 volatile4.6 SIGCHLD信号(了解) 4.捕捉信号 4.1 重谈地址空间 用户页表有几份? 有几个进程,就有几份用户级页表–进程具有独立性…...
洛谷 P1387 最大正方形 C语言
题目描述 在一个 n m 的只包含 0 和 1 的矩阵里找出一个不包含 0 的最大正方形,输出边长。 输入格式 输入文件第一行为两个整数 n, m (1 ≤ n, m ≤ 100),接下来 n 行,每行 m 个数字,用空格隔开,0 或 1。 输出格式 …...
使用React和Material-UI构建TODO应用的前端UI
使用React和Material-UI构建TODO应用的前端UI 引言环境准备代码解析1. 导入必要的模块2. 创建React组件3. 定义函数3.1 获取TODO列表3.2 创建TODO项3.3 更新TODO项3.4 删除TODO项3.5 处理编辑点击事件3.6 关闭编辑对话框3.7 保存编辑内容 4. 使用Effect钩子5. 渲染组件 功能实现…...
2502,索界面3
原文 SonicUI,你从未见过的方便GUI引擎-源码 介绍 SonicUI是基于原生GDIAPI的GUI引擎.它提供了几个简单的UI组件来实现高效的UI效果,如自绘按钮,不规则窗口,动画,窗口中的网径和图像操作方法. 主要目的是用最少的代码来达到最佳效果. 背景 周知,UI开发一般重复用无趣.因此…...
ChatGPT提问技巧:行业热门应用提示词案例--咨询法律知识
ChatGPT除了可以协助办公,写作文案和生成短视频脚本外,和还可以做为一个法律工具,当用户面临一些法律知识盲点时,可以向ChatGPT咨询获得解答。赋予ChatGPT专家的身份,用户能够得到较为满意的解答。 1.咨询法律知识 举…...
[吾爱出品]CursorWorkshop V6.33 专业鼠标光标制作工具-简体中文汉化绿色版
CursorWorkshop V6.33 专业鼠标光标制作工具 链接:https://pan.xunlei.com/s/VOIFeq5DFB9FS56Al_mT2EfdA1?pwd7ij4# 产品概述 Axialis CursorWorkshop 是一个专业光标创作工具它在 Windows 下运行,让您轻松创建高质量的静态和动态光标适用于 Windows …...
《运维:技术的基石,服务的保障》
1. LVS(Linux Virtual Server):基于Linux内核的四层负载均衡解决方案 2. Bonding(链路聚合):物理网卡冗余与带宽叠加技术 3. RHEL(Red Hat Enterprise Linux):企业级Li…...
