Java常规写法与新特性对比详解

news2025/1/19 11:32:59

Java常规写法与新特性对比详解

  • ✨1. Lambda表达式对比常规写法:
    • ⭐️1.1 迭代集合:
    • ⭐️1.2 条件过滤:
    • ⭐️1.3 映射转换:
  • ✨2. Stream API对比常规写法:
    • ⭐️2.1 过滤和计数:
    • ⭐️2.2 排序:
    • ⭐️2.3 转换为其他数据结构:
  • ✨3. 方法引用:
  • ✨4. Optional:
  • ✨5. 并发编程:

✨ ✨ ⭐️ ⭐️

博主 默语带您 Go to New World.
个人主页—— 默语 的博客👦🏻
《java 面试题大全》
🍩惟余辈才疏学浅,临摹之作或有不妥之处,还请读者海涵指正。☕🍭
《MYSQL从入门到精通》数据库是开发者必会基础之一~
🪁 吾期望此文有资助于尔,即使粗浅难及深广,亦备添少许微薄之助。苟未尽善尽美,敬请批评指正,以资改进。!💻⌨

在这里插入图片描述

简介:
Java是一门广泛应用的编程语言,近年来引入了许多新特性,如Lambda表达式和Stream API等。尽管这些新特性非常流行,但很多开发者仍然对它们使用不够熟练。本文将详细介绍Java的常规写法和新特性的对比,包括示例代码和说明,以帮助您更好地理解和运用这些新特性。

✨1. Lambda表达式对比常规写法:

Lambda表达式是Java 8引入的一项重要特性,它简化了匿名内部类的写法,并提供了一种更简洁、更灵活的函数式编程方式。下面是一些常见的对比示例:

Runnable runnable = new Runnable() {
    @Override
    public void run() {
        System.out.println("Hello, World!");
    }
};

Lambda表达式示例:

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

⭐️1.1 迭代集合:

常规写法:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
for (Integer number : numbers) {
    System.out.println(number);
}

Lambda写法:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.forEach(number -> System.out.println(number));

⭐️1.2 条件过滤:

常规写法:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> evenNumbers = new ArrayList<>();
for (Integer number : numbers) {
    if (number % 2 == 0) {
        evenNumbers.add(number);
    }
}

Lambda写法:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> evenNumbers = numbers.stream()
                                   .filter(number -> number % 2 == 0)
                                   .collect(Collectors.toList());

⭐️1.3 映射转换:

常规写法:

List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
List<Integer> nameLengths = new ArrayList<>();
for (String name : names) {
    nameLengths.add(name.length());
}

Lambda写法:

List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
List<Integer> nameLengths = names.stream()
                                .map(name -> name.length())
                                .collect(Collectors.toList());

✨2. Stream API对比常规写法:

Stream API是Java 8引入的另一个重要特性,它提供了一种更便捷、更高效的集合操作方式。下面是一些常见的对比示例:

List<String> names = Arrays.asList("Alice", "Bob", "Charlie");

List<String> filteredNames = new ArrayList<>();
for (String name : names) {
    if (name.length() > 4) {
        filteredNames.add(name);
    }
}

Stream API示例:

List<String> names = Arrays.asList("Alice", "Bob", "Charlie");

List<String> filteredNames = names.stream()
    .filter(name -> name.length() > 4)
    .collect(Collectors.toList());

⭐️2.1 过滤和计数:

常规写法:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int count = 0;
for (Integer number : numbers) {
    if (number % 2 == 0) {
        count++;
    }
}

Stream API写法:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
long count = numbers.stream()
                    .filter(number -> number % 2 == 0)
                    .count();

⭐️2.2 排序:

常规写法:

List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
Collections.sort(names);

Stream API写法:

List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
List<String> sortedNames = names.stream()
                               .sorted()
                               .collect(Collectors.toList());

⭐️2.3 转换为其他数据结构:

常规写法:

List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
Set<String> nameSet = new HashSet<>(names);

Stream API写法:

List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
Set<String> nameSet = names.stream()
                           .collect(Collectors.toSet());

✨3. 方法引用:

方法引用是Java 8中与Lambda表达式相关的一个特性,它可以进一步简化Lambda表达式的写法。方法引用可以直接引用已有的方法,而不需要像Lambda表达式那样编写一个匿名方法。

常规写法示例:

List<String> names = Arrays.asList("Alice", "Bob", "Charlie");

names.forEach(name -> System.out.println(name));

方法引用示例:

List<String> names = Arrays.asList("Alice", "Bob", "Charlie");

names.forEach(System.out::println);

✨4. Optional:

Optional是Java 8中引入的一个用于解决空指针异常的类。它可以包装一个可能为null的值,并提供了一些方法来处理这个值。

常规写法示例:

String name = null;
if (name != null) {
    System.out.println(name.length());
} else {
    System.out.println("Name is null");
}

Optional示例:

Optional<String> name = Optional.ofNullable(null);
name.ifPresentOrElse(
    value -> System.out.println(value.length()),
    () -> System.out.println("Name is null")
);

✨5. 并发编程:

Java提供了多线程的支持,但在Java 8之前,编写多线程代码相对复杂。Java 8引入了一些新的并发编程特性,如并发集合和CompletableFuture,使并发编程更加简单和高效。

常规写法示例:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

List<Integer> doubledNumbers = new ArrayList<>();
for (Integer number : numbers) {
    doubledNumbers.add(number * 2);
}

并发编程示例:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

List<Integer> doubledNumbers = numbers.parallelStream()
    .map(number -> number * 2)
    .collect(Collectors.toList());

这些示例涵盖了Lambda表达式、Stream API、方法引用、Optional和并发编程等Java的新特性。

总结:
本文介绍了Java的常规写法和新特性的对比,包括Lambda表达式和Stream API。通过使用这些新特性,可以编写更简洁、更易读的代码,并且能够更高效地处理集合操作。

如对本文内容有任何疑问、建议或意见,请联系作者,作者将尽力回复并改进📓;(联系微信:Solitudemind )

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

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

相关文章

通过 Postman+Newman+Jenkins 进行接口自动化测试和进一步实现 CI

目录 前言&#xff1a; Postman 部分 Collection 或者说测试集的建立 Postman 使用详解 测试工具 mock server Newman 的安装和使用 newman 的使用 对 SSL 的支持 newman 第三版以后&#xff08;目前已经是 4.3.1&#xff09;可以支持通过 CLI 选项来支持 SSL 对 new…

Python 使用 Stable Diffusion API 生成图片示例

代码&#xff1a; import base64 import datetime import json import osimport requestsdef submit_post(url: str, data: dict):"""Submit a POST request to the given URL with the given data.:param url: url:param data: data:return: response"…

用html+javascript打造公文一键排版系统6:三级标题排版

正文中的标题分为四级&#xff0c;文中结构层次序数依次可以用“一、”“&#xff08;一&#xff09;”“1.”“&#xff08;1&#xff09;”标注&#xff1b;一般第一层用黑体字、第二层用楷体字加粗、第三层和第四层用仿宋体字标注。 对于以阿拉伯数字开头、后接英文点号.及…

First image then video A two-stage network for spatiotemporal video denoising

First image then video: A two-stage network for spatiotemporal video denoising http://export.arxiv.org/abs/2001.00346 作者&#xff1a;王策 南开大学 本文针对的是视频中出现大运动。或者前景和背景由于弱光环境较弱时造成去噪性能差的问题而解决&#xff0c;论文时在…

String 类的常用方法

String类的常用方法 说明 String类是保存字符串常量的&#xff0c;每次更新都需要重新开辟空间&#xff0c;效率比较低&#xff0c;因此 java 设计者还提供了StringBuilder和StringBuffer来增强String的功能&#xff0c;并提高效率。 常用方法 public class String01 {publi…

C语言——动态内存管理(malloc, calloc, realloc, free, 柔性数组详解)

C语言——动态内存管理 1. 为什么需要动态内存管理 我们以往定义数组&#xff0c;都是这么定义的&#xff1a; int nums[10] {0};以这种方式开辟空间有两个特点&#xff1a; 空间开辟的大小是固定的数组在声明的时候&#xff0c;必须指定数组的长度&#xff0c;它所需要的内…

数据库应用:Navicat连接MySQL

目录 一、理论 1.Navicat 2.MVCC 二、实验 1.Navicat连接MySQL 2.navicat的基础操作 3.测试提交事务 三、问题 1.解决1130 2.解决2003 四、总结 一、理论 1.Navicat &#xff08;1&#xff09;简介 Navicat Premium 是一套数据库开发工具&#xff0c;实现从单一应用…

基于时域特征和频域特征组合的敏感特征集,再利用CNN进行轴承故障诊断(python编程)

1.文件夹介绍&#xff08;使用的是CWRU数据集&#xff09; 0HP-3HP四个文件夹装载不同工况下的内圈故障、外圈故障、滚动体故障和正常轴承数据。 2.模型 按照1024的长度分割样本&#xff0c;构建内圈故障、外圈故障、滚动体故障和正常轴承样本集 2.1.计算11种时域特征值 # 计…

EfficientNet论文笔记

EfficientNet论文笔记 通过NAS平衡了channel&#xff0c;depth&#xff0c;resolution&#xff0c;发现在相同的FLOPs下&#xff0c;同时增加 depth和 resolution的效果最好。 数据集效果小于resolution怎么办&#xff1f; EfficientNet—b0框架 表格中每个MBConv后会跟一个…

Maven —— 项目管理工具

前言 在这篇文章中&#xff0c;荔枝会介绍如何在项目工程中借助Maven的力量来开发&#xff0c;主要涉及Maven的下载安装、环境变量的配置、IDEA中的Maven的路径配置和信息修改以及通过Maven来快速构建项目。希望能对需要配置的小伙伴们有帮助哈哈哈哈~~~ 文章目录 前言 一、初…

力扣刷题序列 - 字符串篇

这里写目录标题 字符1.520 回文串的定义2. 125 公共前缀3. 14 单词4. 4345. 58 字符串的反转6. 3447. 5418. 5579. 151 字符的统计10. 38711. 38912. 38313. 24214. 4915. 45116. 42317. 65718. 55119. 69620. 467 数字与字符间的转换21.41222.50623.53924.553537592---64038 子…

GAME101 OpenCV环境安装

文章目录 Opencv 库编译Step 1.下载源码Step 2. 使用CMake编译Step3. 解决CMake 过程重的报错错误1&#xff1a; 错误的Python版本:错误1 解决办法 错误2&#xff1a;下载ippicv_2020_win_ia32_20191018_general.zip失败错误2 解决办法 错误3&#xff1a;ffmpeg相关文件下载失败…

力扣 509.斐波那契数

509.斐波那契数 1 题目2 思路3 代码4 结果 1 题目 题目来源&#xff1a;力扣&#xff08;LeetCode &#xff09;https://leetcode.cn/problems/fibonacci-number 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为斐波那契数列 。该数列由 0 和 1 开始&…

git国内下载

https://npm.taobao.org/mirrors/git-for-windows/点进去最新的最后一条 选择.exe文件点击

二、遥感物理基础(2)物体的发射与反射辐射特征

前言 本文内容较为枯燥&#xff0c;是遥感的物理原理&#xff0c;作者已经尽量去帮助读者理解了&#xff0c;无论是精细的阅读还是走马观花&#xff0c;长期下来都能提高读者对专业知识的理解&#xff1b;作者非物理专业&#xff0c;对某些知识点的总结仅是个人理解&#xff0c…

win7 刻录机刻录文件显示 “准备好写入到”光盘中的文件”

一、问题描述 就是这么突然&#xff0c;好好的刻录机&#xff0c;突然就刻录不了了&#xff0c;昨天都可以正常刻录&#xff0c;今天就显示&#xff1a; 准备好写入到”光盘中的文件&#xff0c;然后还显示待刻录的文件…&#xff0c;右键选择刻录就直接弹出光盘了&#xff1f…

吴恩达机器学习2022-Jupyter特征缩放

1可选实验室: 特征缩放和学习率(多变量) 1.1 目标 在这个实验室里: 利用前一实验室开发的多变量线性回归模型程序在具有多种功能的数据集上运行梯度下降法探讨学习速度 alpha 对梯度下降法的影响通过使用 z 分数标准化的特征缩放来提高梯度下降法的性能 1.2 工具 您将使用…

第七章:FCN——Fully Convolutional Networks for Semantic Segmentation

0.摘要 卷积神经网络是强大的视觉模型&#xff0c;能够产生特征的层级结构。我们展示了通过端到端、像素到像素的训练的卷积神经网络在语义分割方面超越了现有技术的最新成果。我们的关键发现是构建“全卷积”网络&#xff0c;它可以接受任意大小的输入并生成相应大小的输出&am…

OSPF和VLAN综合实验

目录 题目 1.IP地址的规划设计 2.搭建拓扑并进行基础IP配置 3.配置虚拟局域网 1&#xff09;按子网划分要求配置PC1和PC2 检测&#xff1a;输入[SW1]display vlan进行检查 配置路由器R3 检测&#xff1a;用PC1去访问PC2 2&#xff09;配置拓扑中其余路由器的网关以及回…

基于安森美音频处理器Ezairo 8300助听器设计

v hezkz17进数字音频系统研究开发交流答疑 Ezairo 8300 系统框图 许多现代音频产品将受益于安森美(onsemi)基于DSP的EZAIRO系列音频处理器。 安森美&#xff08;ON Semiconductor&#xff09;的EZAIRO系列音频处理器是基于数字信号处理器&#xff08;DSP&#xff09;的产品系列…