JUC并发编程_四大函数式接口和 Stream 流式计算

JUC并发编程_四大函数式接口和 Stream 流式计算

    • 四大函数式接口
      • Function 接口
      • Predicate 接口
      • Consumer 接口
      • Supplier 接口
    • Stream 流式计算
      • Stream 的中间操作
        • filter:过滤流中的元素,只保留满足条件的元素
        • map:对流中的每个元素应用一个函数,并将结果收集到一个新的流中
        • sorted:对流中的元素进行排序
        • distinct:去除流中的重复元素
        • limit:获取流中的前N个元素
        • skip:跳过流中的前N个元素
      • Stream 的终端操作
        • forEach:对流中的每个元素执行一个操作
        • collect:将流中的元素收集到一个List、Set或Map中
        • count:统计流中的元素数量
        • min/max:查找流中的最小或最大元素
        • reduce:通过某种计算将流中的所有元素组合起来,得到一个值

四大函数式接口

Function 接口

接受一个输入参数并返回结果。主要用于转换数据,比如字符串转大写、数字加一等。
方法:R apply(T t)

Function<String, String> function = (String str) -> {if (StrUtils.isNotEmpty(str)) {return str;} else {return "";}
};
System.out.println(function.apply("blu"));

Predicate 接口

方法:boolean test(Object o)
接受单个输入参数并返回布尔值结果。主要用于条件判断,比如检查字符串是否为空、数字是否大于某个值等。

Predicate predicate = (Predicate<String>) str -> StrUtils.isEmpty(str);
System.out.println(predicate.test("blu"));

Consumer 接口

方法:void accept(T t)
接受单个输入参数但不返回任何结果,主要用于执行某些操作,比如打印日志、发送数据等。

Consumer<String> consumer = str -> System.out.println(str);
consumer.accept("blu");

Supplier 接口

方法:T get()
不接受任何参数但返回某种类型结果,主要用于提供数据,比如生成随机数、获取当前时间等。

Supplier<Integer> supplier = () -> {Random random = new Random();//生成0-100的随机整数return random.nextInt(101);
};
System.out.println(supplier.get());

Stream 流式计算

List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("4");
list.add("");
list.stream().filter(s -> {return !s.isEmpty();}).filter(s -> {return Integer.parseInt(s) > 2;}).map(s -> {return Integer.parseInt(s);}).sorted(Comparator.reverseOrder()).distinct().limit(1).forEach(i -> {System.out.println(i * 100);});

Stream 的中间操作

filter:过滤流中的元素,只保留满足条件的元素
Stream<T> filter(Predicate<? super T> predicate);
map:对流中的每个元素应用一个函数,并将结果收集到一个新的流中
<R> Stream<R> map(Function<? super T, ? extends R> mapper);
sorted:对流中的元素进行排序
Stream<T> sorted(Comparator<? super T> comparator);
distinct:去除流中的重复元素
Stream<T> distinct();
limit:获取流中的前N个元素
Stream<T> limit(long maxSize);
skip:跳过流中的前N个元素
Stream<T> skip(long n);

Stream 的终端操作

forEach:对流中的每个元素执行一个操作
stream.forEach(i -> {//do Something
});
collect:将流中的元素收集到一个List、Set或Map中
stream.collect(Collectors.toList());
count:统计流中的元素数量
long count = stream.count();
min/max:查找流中的最小或最大元素
stream.min(Comparator.comparing(i -> {return i;
}));
reduce:通过某种计算将流中的所有元素组合起来,得到一个值

求和

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream().reduce(0, Integer::sum);

字符串拼接

List<String> strs = Arrays.asList("B", "L", "U");
String all = strs.stream().reduce("Hello ", (s, s2) -> s + s2);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/54643.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何利用 Kafka,实时挖掘企业数据的价值?

首先&#xff0c;问读者老爷们一个简单的问题&#xff0c;如果你需要为你的数据选择一个同时具备高吞吐 、数据持久化、可扩展的数据传递系统&#xff0c;你会选择什么样的工具或架构呢&#xff1f; 答案非常显而易见&#xff0c;那就是 Kafka&#xff0c;不妨再次套用一个被反…

使用Java基于GeoTools读取Shapefile矢量数据属性信息-以某市POI数据为例

前言 在之前的博客中&#xff0c;我们讲过在GDAL中如何读取空间数据的属性和数据信息&#xff0c;也简单的讲过如何在GeoTools中读取Shapefile文件的属性信息和数据信息。对于空间矢量数据库&#xff0c;就像我们传统的二维数据库的表字段和表数据的关系&#xff0c;在研究表数…

14 vue3之内置组件trastion全系列

前置知识 Vue 提供了 transition 的封装组件&#xff0c;在下列情形中&#xff0c;可以给任何元素和组件添加进入/离开过渡: 条件渲染 (使用 v-if)条件展示 (使用 v-show)动态组件组件根节点 自定义 transition 过度效果&#xff0c;你需要对transition组件的name属性自定义。…

jupyter安装与使用——Ubuntu服务器

jupyter安装与使用——Ubuntu服务器 一、安装miniconda3/anaconda31. 下载miniconda32. 安装miniconda33. 切换到bin文件夹4. 输入pwd获取路径5. 打开用户环境编辑页面6. 重新加载用户环境变量7. 初始化conda8.验证是否安装成功9.conda配置 二、安装jupyter2.1 conda安装2.2 配…

国货之光|暴雨携信创新品亮相第八届丝博会

9月20日&#xff0c;第八届丝绸之路国际博览会暨中国东西部合作与投资贸易洽谈会&#xff08;以下简称“丝博会”&#xff09;在西安举行。 本届丝博会以“深化互联互通拓展经贸合作”为主题&#xff0c;会期为9月20日至24日&#xff0c;在西安国际会展中心设置国际交流展、省际…

研一奖学金计划2024/9/23有感

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、需要认真上课的1.应用数理统计&#xff08;开卷考试&#xff09;2.最优化方法&#xff08;开卷考试&#xff09;3.跨文化交际&#xff08;主题演讲20课堂讨…

[系统设计总结] - Proximity Service算法介绍

问题描述 Proximity Service广泛应用于各种地图相关的服务中比如外卖&#xff0c;大众点评&#xff0c;Uber打车&#xff0c;Google地图中&#xff0c;其中比较关键的是我们根据用户的位置来快速找到附近的餐厅&#xff0c;司机&#xff0c;外卖员也就是就近查询算法。 主流的…

小程序面板开发教程|开发照明 Matter 面板步骤(一)

一. 前置知识 前言 出于对 Matter 标准协议及第三方设备接入的可拓展性等方面考虑&#xff0c;照明 Matter 模型面板的功能点定义会与照明的 DP 模型有所不同&#xff0c;因此本文会着重介绍照明 Matter 面板的功能点定义及与 DP 模型的区别&#xff0c;以方便面板小程序开发…

Qt-QLabel 添加图片并设置 GIF 图动态效果

Qt-QLabel 添加图片并设置 GIF 图动态效果 一、添加图片资源并设置图片 选择标签&#xff0c;拖拉到界面上&#xff0c;然后选择器属性 picmap   选择设置&#xff0c;在这里添加图片资源   点击左边的加号符号按钮添加前缀&#xff0c;并设置前缀名&#xff0c;如果已经…

uniapp+renderJS+google map开发安卓版APP非小程序

背景需求 需要在uniapp中接入google地图,研究了一番,都没有找到合适的,现在说一下教程。 效果图 前期工作 这两点缺一不可,否则你啥也看不到。 1、电脑安装L-O-U梯 用于访问G-OO-G-LE的API或者创建google map key。 2、手机安装L-O-U梯 用于显示google地图。我就是手…

数据篇| 关于Selenium反爬杂谈

友情提示:本章节只做相关技术讨论, 爬虫触犯法律责任与作者无关。 LLM虽然如火如荼进行着, 但是没有数据支撑, 都是纸上谈兵, 人工智能的三辆马车:算法-数据-算力,缺一不可。之前写过关于LLM微调文章《微调入门篇:大模型微调的理论学习》、《微调实操一: 增量预训练(Pretrai…

USB 电缆中的信号线 DP、DM 的缩写由来

经常在一些芯片的规格书中看到 USB 的信号对是以 DP 和 DM 命名&#xff1a; 我在想&#xff0c;这些规格书是不是写错了&#xff0c;把 N 写成 M 了&#xff1f;DM 中的 M 到底是什么的缩写&#xff1f; 于是我找了一些资料&#xff0c;终于在《Universal Serial Bus Cables …

xilinx hbm ip运用

AXI-HBM是一个集成的IP核&#xff0c;该核提供高达16个AXI3从PORT的HBM接口&#xff0c;每个使用他自己的独立的时钟。HBM2 GEN存储器也支持&#xff0c;HBM相对传统DDR的方案&#xff0c;带宽得到极大的提高 特征 AXI3从端口存储器接口 -16个独立的256bit存储器接口 -可选的…

Why Is Prompt Tuning for Vision-Language Models Robust to Noisy Labels?

文章汇总 本文的作者针对了提示学习的结构设计进行了分析&#xff0c;发现了一些规律&#xff1a; 1)固定的类名令牌为模型的优化提供了强正则化&#xff0c;减少了由噪声样本引起的梯度。 2)从多样化和通用的web数据中学习到的强大的预训练图像文本嵌入为图像分类提供了强大…

FreeRTOS学习——接口宏portmacro.h

FreeRTOS学习——接口宏portmacro.h&#xff0c;仅用于记录自己阅读与学习源码 FreeRTOS Kernel V10.5.1 portmacro版本&#xff1a;GCC/ARM_CM7 portmacro.h是什么 portmacro.h头文件&#xff0c;用于定义与特定硬件平台相关的数据类型和常量。 在移植过程中&#xff0c;…

stm32 keil有一些别人的工程在你这打开为什么会乱码?如何解决的

因为别人编辑代码使用的编辑器和你的不一样&#xff0c;要更正可以调一下自己的翻译器编码格式 也可以直接换掉文件的格式&#xff0c; 用记事本打开文件&#xff0c;然后点会另存为&#xff0c;下面有个编码格式选择&#xff0c;换成你自己的就行

结构设计模式 -装饰器设计模式 - JAVA

装饰器设计模式 一. 介绍二. 代码示例2.1 抽象构件&#xff08;Component&#xff09;角色2.2 具体构件&#xff08;Concrete Component&#xff09;角色2.3 装饰&#xff08;Decorator&#xff09;角色2.4 具体装饰&#xff08;Concrete Decorator&#xff09;角色2.5 测试 结…

【鸿蒙HarmonyOS NEXT】用户首选项Preference存储数据

【鸿蒙HarmonyOS NEXT】数据存储之用户首选项Preference 一、环境说明二、Preference运作机制三、示例代码加以说明四、小结 一、环境说明 DevEco Studio 版本&#xff1a; API版本&#xff1a;以12为主 二、Preference运作机制 应用场景&#xff1a; 用户首选项为应用提…

模型Alignment之RLHF与DPO

1. RLHF (Reinforcement Learning from Human Feedback) RLHF 是一种通过人类反馈来强化学习的训练方法&#xff0c;它能够让语言模型更好地理解和执行人类指令。 RLHF 的三个阶段 RLHF 的训练过程一般分为三个阶段&#xff1a; 监督微调&#xff08;Supervised Fine-Tuning,…

TensorRT-LLM——优化大型语言模型推理以实现最大性能的综合指南

引言 随着对大型语言模型 (LLM) 的需求不断增长&#xff0c;确保快速、高效和可扩展的推理变得比以往任何时候都更加重要。NVIDIA 的 TensorRT-LLM 通过提供一套专为 LLM 推理设计的强大工具和优化&#xff0c;TensorRT-LLM 可以应对这一挑战。TensorRT-LLM 提供了一系列令人印…