Lambda 表达式

一、Lambda 表达式简介

Lambda 表达式是一种简洁的函数式编程方式,用于实现只有一个方法的接口(例如函数式接口)。

基本语法

(parameters) -> expression
(parameters) -> { statements; }
  • 参数:可以有零个或多个参数。
  • 箭头操作符 (->):将参数与函数体分隔开。
  • 函数体:可以是单行表达式,也可以是包含多行语句的代码块。

示例

1. 使用匿名
Runnable runnable = new Runnable() {@Overridepublic void run() {System.out.println("传统方式:Hello World!");}
};
new Thread(runnable).start();
2. 使用 Lambda 表达式
Runnable runnable = () -> System.out.println("Lambda 表达式:Hello World!");
new Thread(runnable).start();

Lambda 表达式让代码更加简洁,提高了可读性。


二、Stream API 简介

Stream 是 Java 8 引入的一个强大的 API,用于处理集合中的数据流。它支持链式操作,允许我们以声明式的方式处理数据。

Stream 的操作类型

  1. 中间操作:返回一个新的 Stream,如 filtermapsorted 等。
  2. 终止操作:返回一个值或集合,如 collectreducecount 等。

三、常见的 Stream 操作示例

1. List 转 Set

我们可以通过 StreamList 转换为 Set,去除重复元素。

import java.util.*;
import java.util.stream.Collectors;public class ListToSetExample {public static void main(String[] args) {List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 2, 3, 1);// List 转 SetSet<Integer> uniqueNumbers = numbers.stream().collect(Collectors.toSet());System.out.println("去重后的 Set: " + uniqueNumbers);}
}

输出

去重后的 Set: [1, 2, 3, 4]

2. Map 转 List

通过 Stream 可以将 Map 的键、值或者键值对转为 List

import java.util.*;
import java.util.stream.Collectors;public class MapToListExample {public static void main(String[] args) {Map<Integer, String> map = new HashMap<>();map.put(1, "Java");map.put(2, "Python");map.put(3, "C++");// Map 的键转为 ListList<Integer> keys = map.keySet().stream().collect(Collectors.toList());// Map 的值转为 ListList<String> values = map.values().stream().collect(Collectors.toList());// Map 的键值对转为 ListList<String> entries = map.entrySet().stream().map(entry -> entry.getKey() + "=" + entry.getValue()).collect(Collectors.toList());System.out.println("键列表: " + keys);System.out.println("值列表: " + values);System.out.println("键值对列表: " + entries);}
}

输出

键列表: [1, 2, 3]
值列表: [Java, Python, C++]
键值对列表: [1=Java, 2=Python, 3=C++]

3. 过滤(Filter)

通过 filter 方法可以对集合中的元素进行筛选。

import java.util.*;
import java.util.stream.Collectors;public class FilterExample {public static void main(String[] args) {List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");// 筛选名字长度大于 3 的元素List<String> filteredNames = names.stream().filter(name -> name.length() > 3).collect(Collectors.toList());System.out.println("筛选后的名字: " + filteredNames);}
}

输出

筛选后的名字: [Alice, Charlie, David]

4. 求和

通过 reduce 方法可以对数字集合进行累加。

import java.util.*;public class SumExample {public static void main(String[] args) {List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);// 求和int sum = numbers.stream().reduce(0, Integer::sum);System.out.println("总和: " + sum);}
}

输出

总和: 15

5. 分组

通过 Collectors.groupingBy 方法可以对集合中的元素进行分组。

import java.util.*;
import java.util.stream.Collectors;public class GroupingExample {public static void main(String[] args) {List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David", "Daniel");// 按名字长度分组Map<Integer, List<String>> groupedByLength = names.stream().collect(Collectors.groupingBy(String::length));System.out.println("按名字长度分组: " + groupedByLength);}
}

输出

按名字长度分组: {3=[Bob], 5=[Alice, David], 7=[Charlie, Daniel]}

6. Map 和 Reduce 操作

  • Map:将元素映射为另一种类型。
  • Reduce:将多个值归约为一个值。
Map 示例
import java.util.*;public class MapExample {public static void main(String[] args) {List<String> names = Arrays.asList("alice", "bob", "charlie");// 将名字转换为大写List<String> upperCaseNames = names.stream().map(String::toUpperCase).collect(Collectors.toList());System.out.println("转换为大写: " + upperCaseNames);}
}

输出

转换为大写: [ALICE, BOB, CHARLIE]
Reduce 示例
import java.util.*;public class ReduceExample {public static void main(String[] args) {List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);// 计算乘积int product = numbers.stream().reduce(1, (a, b) -> a * b);System.out.println("乘积: " + product);}
}

输出

乘积: 120

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

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

相关文章

WPS如何接入DeepSeek(通过第三方工具)

WPS如何接入DeepSeek 一、下载并安装OfficeAI插件二、配置OfficeAI插件三、使用DeepSeek功能 本文介绍如何通过 WPS 的第三方工具调用 DeepSeek 大模型&#xff0c;实现自动化文本扩写、校对和翻译等功能。 一、下载并安装OfficeAI插件 1、访问OfficeAI插件下载地址&#xff…

Day 32 卡玛笔记

这是基于代码随想录的每日打卡 455. 分发饼干 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff…

[渗透测试]热门搜索引擎推荐— — shodan篇

[渗透测试]热门搜索引擎推荐— — shodan篇 免责声明&#xff1a;本文仅用于分享渗透测试工具&#xff0c;大家使用时&#xff0c;一定需要遵守相关法律法规。 除了shodan&#xff0c;还有很多其他热门的&#xff0c;比如&#xff1a;fofa、奇安信的鹰图、钟馗之眼等&#xff0…

BUU30 [网鼎杯 2018]Fakebook1

是一个登录界面&#xff0c;我们先注册一个试试&#xff1a; 用dirsearch扫描出来robots.txt&#xff0c;也发现了flag.php&#xff0c;并下载user.php.bak 源代码内容&#xff1a; <?phpclass UserInfo {public $name "";public $age 0;public $blog &quo…

索引失效的场景

chatGpt 7. 使用 DISTINCT 或 GROUP BY 当查询中涉及 DISTINCT 或 GROUP BY 时&#xff0c;如果查询没有合适的索引支持&#xff0c;可能会导致性能问题&#xff0c;虽然不完全是索引失效&#xff0c;但会影响查询效率。 sql SELECT DISTINCT department_id FROM employees;…

3D数字化营销:重塑家居电商新生态

随着电商的蓬勃发展&#xff0c;网上订购家具已成为众多消费者的首选。然而&#xff0c;线上选购家具的诸多挑战&#xff0c;如风格不匹配、尺寸不合适、定制效果不如预期以及退换货不便等&#xff0c;一直困扰着消费者。为解决这些问题&#xff0c;家居行业急需一种全新的展示…

论文阅读--LlaVA

数据 使用GPT-4&#xff0c;根据现有的图片对数据&#xff08;image-pair data&#xff09;收集指令跟随数据。作者团队收集了158,000个独特的语言-图像指令遵循样本&#xff0c;其中包括58,000个对话样本、23,000个详细描述样本和77,000个复杂推理样本 以图像描述为例&#x…

【R语言】apply函数族

在R语言中使用循环操作时是使用自身来实现的&#xff0c;效率较低。所以R语言有一个符合其统计语言出身的特点&#xff1a;向量化。R语言中的向量化运用了底层的C语言&#xff0c;而C语言的效率比高层的R语言的效率高。 apply函数族主要是为了解决数据向量化运算的问题&#x…

归一化与伪彩:LabVIEW图像处理的区别

在LabVIEW的图像处理领域&#xff0c;归一化&#xff08;Normalization&#xff09;和伪彩&#xff08;Pseudo-coloring&#xff09;是两个不同的概念&#xff0c;虽然它们都涉及图像像素值的调整&#xff0c;但目的和实现方式截然不同。归一化用于调整像素值的范围&#xff0c…

【3分钟极速部署】在本地快速部署deepseek

第一步&#xff0c;找到网站&#xff0c;下载&#xff1a; 首先找到Ollama &#xff0c; 根据自己的电脑下载对应的版本 。 我个人用的是Windows 我就先尝试用Windows版本了 &#xff0c;文件不是很大&#xff0c;下载也比较的快 第二部就是安装了 &#xff1a; 安装完成后提示…

论文阅读:MGMAE : Motion Guided Masking for Video Masked Autoencoding

MGMAE:Motion Guided Masking for Video Masked Autoencoding Abstract 掩蔽自编码&#xff08;Masked Autoencoding&#xff09;在自监督视频表示学习中展现了出色的表现。时间冗余导致了VideoMAE中高掩蔽比率和定制的掩蔽策略。本文旨在通过引入运动引导掩蔽策略&#xff0…

【Ai】--- 可视化 DeepSeek-r1 接入 Chatbox(超详细)

在编程的艺术世界里&#xff0c;代码和灵感需要寻找到最佳的交融点&#xff0c;才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里&#xff0c;我们将共同追寻这种完美结合&#xff0c;为未来的世界留下属于我们的独特印记。 【Ai】--- 可视化 DeepSeek-r1 接入 Chat…

P1049 装箱问题(dp)

#include<bits/stdc.h> using namespace std;int main() {int v,n;cin>>v>>n;int a[30];int dp[20005];for(int i0;i<n;i){cin>>a[i];}memset(dp,0,sizeof(dp));// 设置所有元素为0&#xff0c;表示最大体积为0for(int i0;i<n;i){for(int jv;j&…

程序诗篇里的灵动笔触:指针绘就数据的梦幻蓝图<7>

大家好啊&#xff0c;我是小象٩(๑ω๑)۶ 我的博客&#xff1a;Xiao Xiangζั͡ޓއއ 很高兴见到大家&#xff0c;希望能够和大家一起交流学习&#xff0c;共同进步。 今天我们一起来学习转移表&#xff0c;回调函数&#xff0c;qsort… 目录 一、转移表1.1 定义与原理1.3…

声明式导航,编程式导航,导航传参,下拉刷新

1.页面导航 1.声明式导航 1.1跳转到tabBar页面 1.2跳转到非tabBar页面 1.2后退导航 、 2.编程式导航 2.1跳转到tabBar页面 2.1跳转到非tabBar页面 2.3后退导航 3.导航传参 3.1声名式导航传参 3.2编程式导航传参 3.3在onLoad中接受参数 4.下拉刷新 4.1回顾下拉刷新…

C++ Primer 递增和递减运算符

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…

【C++高并发服务器WebServer】-13:多线程服务器开发

本文目录 一、多线程服务器开发二、TCP状态转换三、端口复用 一、多线程服务器开发 服务端代码如下。 #include <stdio.h> #include <arpa/inet.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <pthread.h>s…

重生之我要当云原生大师(十一)访问Linux文件系统

目录 一、解释下文件系统、块设备、挂载点、逻辑卷。 二、简述文件系统、块设备、挂载点、逻辑卷之间的关系&#xff1f; 三、如何检查文件系统&#xff1f; 四、挂载和卸载文件系统的流程&#xff1f; 五、find命令都可以根据什么查找文件。 一、解释下文件系统、块设备、…

NetCore Consul动态伸缩+Ocelot 网关 缓存 自定义缓存 + 限流、熔断、超时 等服务治理 + ids4鉴权

网关 OcelotGeteway 网关 Ocelot配置文件 {//单地址多实例负载均衡Consul 实现动态伸缩"Routes": [{// 上游 》》 接受的请求//上游请求方法,可以设置特定的 HTTP 方法列表或设置空列表以允许其中任何方法"UpstreamHttpMethod": [ "Get", &quo…

星网锐捷 DMB-BS LED屏信息发布系统taskexport接口处存在敏感信息泄露

星网锐捷 DMB-BS LED屏信息发布系统taskexport接口处存在敏感信息泄露 漏洞描述 福建星网锐捷通讯股份有限公司成立于2000年,公司秉承“融合创新科技,构建智慧未来"的经营理念,是国内领先的ICT基础设施及AI应用方案提供商。星网锐捷 DMB-BS LED屏信息发布系统taskexp…