2024年150道高频Java面试题(十六)

31. Java 8 中引入的 Stream API 有哪些用途?

Java 8 中引入的 Stream API 是一个强大的新特性,它提供了一种高效且易于使用的处理数据的方法。Stream API 的用途主要包括以下几个方面:

  1. 简化集合操作:Stream API 可以对集合对象进行复杂的查询、过滤、映射和归约等操作,而无需显式地编写复杂的循环语句。
  2. 提高性能:通过并行流(Parallel Streams),Stream API 支持在多核处理器上自动分配任务,以充分利用计算资源,提高处理大数据集的效率。
  3. 函数式编程:Stream API 与Lambda表达式结合,使得可以以一种声明式的方式进行数据处理,代码更加简洁,可读性和可维护性更强。

以下是Stream API的一些具体用途:

  • 过滤(Filter):通过设定条件来过滤数据。

    List<String> names = Arrays.asList("John", "Jane", "Doe");
    List<String> filteredNames = names.stream().filter(name -> name.startsWith("J")).collect(Collectors.toList());
    
  • 映射(Map):将流中的每一个元素通过给定的函数进行转换。

    List<Integer> numbers = Arrays.asList(1, 2, 3);
    List<Integer> squares = numbers.stream().map(n -> n * n).collect(Collectors.toList());
    
  • 归约(Reduce):将流中的多个元素组合成一个结果,如求和、求积等。

    Optional<Integer> sum = numbers.stream().reduce(Integer::sum);
    
  • 遍历(ForEach):用于遍历每个元素并进行相应的操作。

    numbers.stream().forEach(System.out::println);
    
  • 匹配(Match):用于检查流中是否存在满足给定条件或所有元素是否满足给定条件的元素。

    boolean anyStartsWithJ = names.stream().anyMatch(name -> name.startsWith("J"));
    boolean allStartsWithJ = names.stream().allMatch(name -> name.startsWith("J"));
    
  • 排序(Sorted):用于对流中的元素进行排序。

    List<String> sortedNames = names.stream().sorted().collect(Collectors.toList());
    
  • 收集(Collect):将流转换成其他形式,如列表、集合、映射等。

    Set<String> uniqueNames = names.stream().collect(Collectors.toSet());
    

通过这些用途,可以看出 Stream API 为Java开发者提供了一种高效、简洁且易于并行化的数据处理方式,极大地丰富了Java在数据处理方面的表现力。

32. 请解释 Java 8 中的 Lambda 表达式和函数式接口。

Java 8 引入的 Lambda 表达式是一个可用于表示匿名函数的语法结构,它可以简化代码编写并提高代码的可读性。Lambda 表达式与函数式接口紧密相关,因为它们通常被用于实现这些接口。

1)Lambda 表达式

Lambda 表达式的基本语法如下:

(parameters) -> expression
或
(parameters) -> { statements; }
  • 参数:如果参数类型可以自动推导,那么可以省略类型声明。
  • ->:箭头操作符,将参数和表达式分开。
  • 表达式/代码块:如果只有一条语句,并且是返回语句,可以省略花括号。

以下是 Lambda 表达式的几个示例:

// 无参数,返回一个整数
() -> 42// 接受一个整数参数并返回其平方
x -> x * x// 接受两个整数参数并返回他们的和
(int x, int y) -> x + y// 接受两个字符串,返回较长的字符串
(String s1, String s2) -> s1.length() > s2.length() ? s1 : s2
2)函数式接口

函数式接口是只包含一个抽象方法的接口。它们可以用 Lambda 表达式来实现。Java 8 中引入了一个注解 @FunctionalInterface 来显式声明一个接口是函数式接口,但这不是必须的。

以下是函数式接口的例子:

@FunctionalInterface
interface MyFunctionalInterface {// 唯一的抽象方法int calculate(int x, int y);
}

可以用 Lambda 表达式实现上述接口:

MyFunctionalInterface add = (x, y) -> x + y;
3)Lambda 表达式与函数式接口的关系

Lambda 表达式通常用于实现函数式接口的实例。Java 编译器根据 Lambda 表达式的类型推导来确定哪个函数式接口应该被实现。

例如,Runnable 是一个只有一个抽象方法的函数式接口:

Runnable run = () -> System.out.println("Hello World!");

在这个例子中,编译器会推导出 () -> System.out.println("Hello World!"); 实现了 Runnable 接口。

总结来说,Lambda 表达式允许以一种简洁、表达性强的方式实现单方法接口(函数式接口),从而增强了 Java 语言在处理高阶函数和集合操作时的表现力。

领【150 道精选 Java 高频面试题】请go公众号:码路向前 。

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

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

相关文章

在ChatGPT中,能用DALL·E 3编辑图片啦!

4月3日&#xff0c;OpenAI开始向部分用户&#xff0c;提供在ChatGPT中的DALLE 3图片编辑功能。 DALLE 3是OpenAI在2023年9月20日发布的一款文生图模型&#xff0c;其生成的图片效果可以与Midjourney、leonardo、ideogram等顶级产品媲美&#xff0c;随后被融合到ChatGPT中增强其…

matlab的歧视:simulink不能使用stm32f4系列的ADC?

2023b的matlab&#xff0c;stm32f407芯片&#xff0c;运行内容Using the Analog to Digital Converter Block to Support STMicroelectronics STM32 Processor Based Boards Using the Analog to Digital Converter Block to Support STMicroelectronics STM32 Processor Base…

基于SSM的社区疫情防控管理信息系统

目录 背景 技术简介 系统简介 界面预览 背景 随着时代的进步&#xff0c;计算机技术已经全方位地影响了社会的发展。随着居民生活质量的持续上升&#xff0c;人们对社区疫情防控管理信息系统的期望和要求也在同步增长。在社区疫情防控日益受到广泛关注的背景下&#xff0c…

【漏洞复现】通天星CMSV6车载主动安全监控云平台inspect_file接口处存在任意文件上传漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

电商技术揭秘一:电商架构设计与核心技术

文章目录 引言一、电商平台架构概述1.1 架构设计原则与架构类型选择1.2 传统电商平台架构与现代化架构趋势分析 二、高并发处理与负载均衡2.1 高并发访问特点分析与挑战2.2 负载均衡原理与算法选择 三、分布式数据库与缓存技术3.1 分布式数据库设计与一致性考量3.2 缓存策略与缓…

第四十二章 保护与 IRIS 的 Web 网关连接 - Windows

文章目录 第四十二章 保护与 IRIS 的 Web 网关连接 - WindowsKerberos 的 Windows Web 网关配置 Kerberos 的 UNIX Web 网关配置Kerberos 的 UNIX Web 网关配置基于 SSL/TLS 的身份验证和数据保护 第四十二章 保护与 IRIS 的 Web 网关连接 - Windows Kerberos 密钥表未针对 Wi…

Vue登陆鉴权方案(token)

Vue token 登陆鉴权完整方案-----总结 一、路由拦截 目的&#xff1a;页面跳转时验证&#xff0c;确认是否即将进入的页面需要登陆验证。 router/index.js //给需要验证的页面添加 meta : { requireAuth :true } 如下&#xff1a; export default new Router({scrollBehavior…

基于SpringBoot和Vue的金融融资管理系统的设计和实现【附源码】

1、系统演示视频&#xff08;演示视频&#xff09; 2、需要交流和学习请联系

vue弹出的添加信息组件中 el-radio 单选框无法点击问题

情景描述:在弹出的添加信息的组件中的form中有一个单选框,单选框无法进行点击切换 原因如下: 单选框要求有个默认值,因为添加和更新操作复用同一个组件,所以我在初始化时对相关进行了判定,如果为空则赋初始值 结果这样虽然实现了初始值的展示,但是就是如此造成了单选框的无法切…

Java Web面试题(四)

1. JDBJDBC的DriverManager主要用于管理一组JDBC驱动程序。其主要职责包括&#xff1a; JDBC的DriverManager主要用于管理一组JDBC驱动程序。其主要职责包括&#xff1a; 注册数据库驱动程序&#xff1a;在使用JDBC连接数据库之前&#xff0c;必须先注册适用于数据库的驱动程…

代码随想录算法训练营第二十九天(回溯5)|491. 非递减子序列、46. 全排列、47. 全排列 II(JAVA)

文章目录 491. 非递减子序列解题思路源码 46. 全排列解题思路源码 47. 全排列 II解题思路源码 总结 491. 非递减子序列 给你一个整数数组 nums &#xff0c;找出并返回所有该数组中不同的递增子序列&#xff0c;递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。 …

Java基础学习: Forest - 极简 HTTP 调用 API 框架

文章目录 一、介绍参考&#xff1a; 一、介绍 Forest是一个开源的Java HTTP客户端框架&#xff0c;专注于简化HTTP客户端的访问。它是一个高层的、极简的轻量级HTTP调用API框架&#xff0c;通过Java接口和注解的方式&#xff0c;将复杂的HTTP请求细节隐藏起来&#xff0c;使HT…

前端返回 List<Map<String, Object>>中的vaue值里面包含一个Bigdecimal类型,序列化时小数点丢失,如何解决?

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

golang channel实践代码及注意事项

在使用Go语言&#xff08;Golang&#xff09;的通道&#xff08;Channel&#xff09;时&#xff0c;有几个重要的注意点可以帮助开发者更安全、高效地使用它们进行并发编程。以下是一些关键的注意事项&#xff1a; 选择正确的通道类型&#xff1a;Go语言提供了两种类型的通道&…

Linux 命令 top 详解

1 top命令介绍 Linux系统中&#xff0c;Top命令主要用于实时运行系统的监控&#xff0c;包括Linux内核管理的进程或者线程的资源占用情况。这个命令对所有正在运行的进程和系统负荷提供不断更新的概览信息&#xff0c;包括系统负载、CPU利用分布情况、内存使用、每个进程的内容…

PS从入门到精通视频各类教程整理全集,包含素材、作业等(7)

PS从入门到精通视频各类教程整理全集&#xff0c;包含素材、作业等 最新PS以及插件合集&#xff0c;可在我以往文章中找到 由于阿里云盘有分享次受限制和文件大小限制&#xff0c;今天先分享到这里&#xff0c;后续持续更新 PS敬伟01——90集等文件 https://www.alipan.com/s…

Golang | Leetcode Golang题解之第7题整数反转

题目&#xff1a; 题解&#xff1a; func reverse(x int) (rev int) {for x ! 0 {if rev < math.MinInt32/10 || rev > math.MaxInt32/10 {return 0}digit : x % 10x / 10rev rev*10 digit}return }

ETL工具-nifi干货系列 第八讲 处理器PutDatabaseRecord 写数据库(详细)

1、本节通过一个小例子来讲解下处理器PutDatabaseRecord&#xff0c;该处理器的作用是将数据写入数据库。 如下流程通过处理器GenerateFlowFile 生成数据&#xff0c;然后通过处理器JoltTransformJSON转换结构&#xff0c;最后通过处理器PutDatabaseRecord将数据写入数据库。如…

keepalived+LVS高可用部署

目录 一.两台设备&#xff08;2.130和2.133&#xff09;作为调度器&#xff0c;前主后备 1.部署keepalived 2.修改配置文件准备启动 3.配置keepalived的系统日志并启动 二.模拟调度器掉点和web服务进程丢失 1.调度器掉点 2.当类似于httpd这种网站服务掉点 三.以三种健康…

C++ 前K个高频单词的六种解法

目录 大堆 小堆 vectorsort vectorstable_sort multimap set/multiset 与GPT的对话 1.对于比较类型中 < 运算符重载的理解 2.map有稳定性的说法吗 ​编辑 3.为什么map和set类的仿函数后面要加const来修饰*this 5.关于名词的理解 6.匿名对象对类要求 7.map和set的…