Java Stream API的基本使用方法

这篇具有很好参考价值的文章主要介绍了Java Stream API的基本使用方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

Java各个版本所更新的主要内容:

1.Java SE 8:引入了一些新特性,如lambda表达式、Stream API、格式化日期、国际化等。此外,还对并发编程进行了改进,引入了线程安全的Stream API
2.Java SE 9:新增了分布式架构的支持,引入了CompletableFuture、ZK等新特性。此外,还对Jit编译器进行了改进,引入了Just-In-Time(JIT)编译器。
3.Java SE 10:主要是为了解决Java SE 9中的一些遗留问题,如null safety、improved ByteBuffer、stream API for Transforming、23种新的基本数据类型等。
4.Java SE 11:新增了许多新特性,如try-with-resources语法糖、独立密钥、Profiler、Crypto API for Java SE、gRPC等。此外,还对AOT和JIT进行了改进,引入了32位系统支持。
5.Java SE 12:主要是为了解决Java SE 11中的一些遗留问题,如security-77、Linux-specific changes、JVM常量库等。
6.Java SE 13:新增了HotSpot 1.13.10支持,削减了JDK知识库的大小,提高了JRE的性能。此外,还对AOT和JIT进行了改进,引入了JVM常量库。
7.Java SE 14:主要是为了修复Java SE 13中的一些漏洞,如CVE-2014-and-earlier、部分音频处理异常等。
8.Java SE 15:新增了Java Native Interface(JNI)支持,用于在Java应用程序中调用本地代码。此外,还对AOT和JIT进行了改进,引入了JVM常量库和Just-In-Time(JIT)编译器。
9.Java SE 16:主要是为了提高Java应用程序的性能和安全性,如JVM常量库、memory-mapped files、外部文件系统等。
10.Java SE 17:主要是为了解决Java SE 16中的一些遗留问题,如JCE-43、部分音频处理异常等。此外,还对AOT和JIT进行了改进,引入了Just-In-Time(JIT)编译器和%K%V等功能。
11.Java SE 18:新增了ZGC和Shenandoah等新特性,以及针对lambda表达式的语法变更。此外,还对并发编程进行了改进,引入了轻量级的stream API。
12.Java SE 19:主要是为了修复Java SE 18中的一些漏洞,如CVE-2020-1719等。
13.Java SE 20:新增了JDK-Convert-Tool和javax.el-api等新特性,以及对AOT和JIT进行了改进,引入了Just-In-Time(JIT)编译器和二次释放池等功能。
14.Java SE 21:主要是为了提高Java应用程序的性能和安全性,如JVM常量库、%K%V、嵌套的文件输入输出等。
15.Java SE 22:主要是为了解决Java SE 21中的一些遗留问题,如CVE-2021-candidates-197等。
16.Java SE 23:主要是为了提高Java应用程序的性能和安全性,如HotSpotSubproject、StandaloneMode、ZGC2、Shenandoah2等。
17.Java SE 24:主要是为了提高Java应用程序的性能和安全性,如autoboxing、华彩发光字等。
18.Java SE 25:主要是为了解决Java SE 24中的一些遗留问题,如CVE-2021-靠前年份等。

Stream API

Java Stream流(Stream API)是Java 8中引入的一种新的流式编程方式,它可以简化对集合的处理,提高代码的可读性和可维护性。
Java Stream API的基本使用方法

常用的方法

1.filter:根据指定条件过滤数据流,返回符合条件的元素。

public class DemoStreamAPI {
	public static void main(String[] args) {
		List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
		numbers.stream()  
			//过滤
        	.filter(n -> n % 2 != 0)  
        	//输出
        	.forEach(System.out::println);
	}
}

输出结果:
Java Stream API的基本使用方法

2.map:将数据流中的每个元素应用于指定的函数,返回一个新的数据流。

public class DemoStreamAPI {
	public static void main(String[] args) {
		List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
		numbers.stream()  
        	.filter(n -> n % 2 != 0)  
        	.map(n -> n * 2)  
        	.forEach(System.out::println);
	}
}

输出结果:
Java Stream API的基本使用方法

3.sorted:根据指定的比较器对数据流进行排序,返回一个新的排序后的数据流。

public class DemoStreamAPI2 {
	public static void main(String[] args) {  
        List<Order> ordersA = Arrays.asList(  
                new Order("2023-01-01", "completed", 100),  
                new Order("2023-01-02", "canceled", 50),  
                new Order("2023-01-03", "completed", 200),  
                new Order("2023-01-04", "canceled", 150),  
                new Order("2023-01-05", "completed", 250),  
                new Order("2023-01-06", "canceled", 100)  
        );
        ordersA.stream()
        .sorted(Comparator.comparing(Order::getTotalAmount))
        .collect(Collectors.toList())
        .forEach(i -> {
        	System.out.println(i.getOrderDate() + "====" + i.getTotalAmount());
        });
    }  
}

输出结果:
Java Stream API的基本使用方法

4.limit:返回数据流中前指定个数的元素。

public class DemoStreamAPI2 {
	public static void main(String[] args) {  
        List<Order> ordersA = Arrays.asList(  
                new Order("2023-01-01", "completed", 100),  
                new Order("2023-01-02", "canceled", 50),  
                new Order("2023-01-03", "completed", 200),  
                new Order("2023-01-04", "canceled", 150),  
                new Order("2023-01-05", "completed", 250),  
                new Order("2023-01-06", "canceled", 100)  
        );
        ordersA.stream()
        .limit(2)
        .sorted(Comparator.comparing(Order::getTotalAmount))
        .collect(Collectors.toList())
        .forEach(i -> {
        	System.out.println(i.getOrderDate() + "====" + i.getTotalAmount());
        });
    }  
}

输出结果:
Java Stream API的基本使用方法

5.forEach:对数据流中的每个元素执行指定的操作。

查看

6.collect:将数据流中的每个元素收集到指定的集合中。

public class DemoStreamAPI2 {
	public static void main(String[] args) {  
        List<Order> ordersA = Arrays.asList(  
                new Order("2023-01-01", "completed", 100),  
                new Order("2023-01-02", "canceled", 50),  
                new Order("2023-01-03", "completed", 200),  
                new Order("2023-01-04", "canceled", 150),  
                new Order("2023-01-05", "completed", 250),  
                new Order("2023-01-06", "canceled", 100)  
        );
        Map<String, List<Order>> groupByOrderStatus = ordersA.stream()
        .sorted(Comparator.comparing(Order::getTotalAmount))
        .collect(Collectors.groupingBy(Order::getOrderStatus));
        System.out.println(groupByOrderStatus.toString());
    }  
}

输出结果:

{canceled=[Order [orderDate=2023-01-02, orderStatus=canceled, totalAmount=50], Order [orderDate=2023-01-06, orderStatus=canceled, totalAmount=100], Order [orderDate=2023-01-04, orderStatus=canceled, totalAmount=150]], completed=[Order [orderDate=2023-01-01, orderStatus=completed, totalAmount=100], Order [orderDate=2023-01-03, orderStatus=completed, totalAmount=200], Order [orderDate=2023-01-05, orderStatus=completed, totalAmount=250]]}

7.anyMatch,allMatch,noneMatch

*anyMatch*:检查数据流中的元素**有一个**符合指定的条件,返回true;
*allMatch*:检查数据流中的元素是否**所有**都符合指定的条件;
*noneMatch* :检查数据流中的元素是否都不符合指定的条件。
public class DemoStreamAPI2 {
	public static void main(String[] args) {  
		List<String> list = new ArrayList<>();
		list.add("C");
		list.add("S");
		list.add("D");
		list.add("N");
		System.out.println(list.stream().anyMatch(i -> i.contains("C"))); // true
		System.out.println(list.stream().allMatch(i -> i.contains("C"))); // false
		System.out.println(list.stream().noneMatch(i -> i.contains("C"))); // false
    }  
}

8.reduce:可以对集合中的元素进行聚合操作,得到一个新的结果。

public class DemoStreamAPI2 {
	public static void main(String[] args) {  
		List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);  
		int sum = numbers.stream()  
		                .reduce(5, (a, b) -> a * b);  //集合中的元素做运算之后,再与第一个参数做运算
		System.out.println("Sum of numbers: " + sum);
    }  
}

输出结果:
Java Stream API的基本使用方法

总结

使用Stream API可以使代码更加简洁、清晰,提高开发效率。但是,使用不当可能会导致代码出现问题,因此需要仔细考虑使用场景和条件。在实际开发中,应该根据具体情况选择合适的数据结构和操作方法,以达到最佳的开发效果。文章来源地址https://www.toymoban.com/news/detail-437525.html

到了这里,关于Java Stream API的基本使用方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java eight 解读流(Stream)、文件(File)、IO和异常处理的使用方法

    java.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。 Java.io 包中的流支持很多种格式,比如:基本类型、对象、本地化字符集等等。 一个流可以理解为一个数据的序列。输入流表示从一个源读取数据,输出流表示向一个目标写数据。

    2024年02月11日
    浏览(33)
  • java反射的基本使用方法

    当我们使用 Java 开发时,有时需要获取某个类的信息,例如类的属性、方法和构造函数等,然后在程序运行期间动态地操作它们。Java 反射就是用来实现这个目的的一种机制。 Java 反射(Reflection)是 Java 编程语言在运行时动态获取类的信息以及动态调用对象方法的能力。它可

    2024年02月16日
    浏览(29)
  • Java中的方法引用--【基本使用详解】

    🎉博客首页:痛而不言笑而不语的浅伤 📢欢迎关注🥳点赞 👍 收藏 ⭐留言 📝 欢迎讨论! 🔮本文由痛而不言笑而不语的浅伤原创,CSDN首发! 🌋系列专栏:《JavaSE系列详解》 🧿首发时间:2022年5月27日 ❤:热爱Java学习,期待一起交流! 🙏🏻作者水平有限,如果发现错

    2024年02月06日
    浏览(40)
  • Java 代理模式的基本概念、使用场景、应用示例和实现方法

    代理模式是一种常见的设计模式,在 Java 开发中被广泛应用。它允许我们通过添加一个代理对象来控制对另一个对象的访问,从而提供了一种间接访问实际对象的方法。本文将详细介绍 Java 代理模式的基本概念、使用场景、应用示例和实现方法等相关内容。 代理模式是一种结

    2024年02月05日
    浏览(47)
  • Stable Diffusion——基础模型、VAE、LORA、Embedding各个模型的介绍与使用方法

    Stable Diffusion(稳定扩散)是一种生成模型,基于扩散过程来生成高质量的图像。它通过一个渐进过程,从一个简单的噪声开始,逐步转变成目标图像,生成高保真度的图像。这个模型的基础版本是基于扩散过程的,但也有一些改进版本,包括基于变分自动编码器(VAE)、局部

    2024年02月22日
    浏览(32)
  • java中Date、LocalDate、LocalTime、时间戳的相互转化和基本使用方法

    目录 1、Date 1、Date格式化工具——SimpleDateFormate用于时间的格式化 2、SimpleDateFormate中的常用方法 2、LocalDate与LocalTime  1、LocalDate的常用方法 2、LocalTime的创建、构造 3、LocalDate、LocalTime格式化工具——DateTimeFormatter 4、parse()与format() 3、calendar 4、时间戳 1、时间戳转换为自定义格

    2024年02月03日
    浏览(35)
  • Java中TreeSet的基本介绍,细节讨论,使用注意事项,常用方法,底层源码分析

    TreeSet 是 Java 中的一个有序集合实现,它基于红黑树数据结构来存储元素, 可以保持元素的自然顺序(默认情况下升序)或者根据自定义比较器来进行排序 。下面是关于 TreeSet 的基本介绍、细节讨论、使用注意事项、常用方法以及一些底层实现细节。 基本介绍: TreeSet 是

    2024年02月11日
    浏览(29)
  • Java 8 中的 Stream API - map() 方法详解

    摘要: Java 8 中的 Stream API 提供了一种新的处理集合和数组的方式,可以使代码更加简洁、易读,同时还可以提高性能。其中 map() 方法是比较常用的方法之一,它可以将 Stream 对象中的每个元素映射为另一个元素。本文将对 Java 8 中的 Stream API 和 map() 方法进行详细介绍,并通

    2024年04月09日
    浏览(43)
  • Java 8 Stream API 中的 peek() 方法详解,以及需要注意的坑。

    在Java 8中,Stream API引入了许多强大的函数式编程特性,极大地增强了我们对集合数据进行操作的能力。其中一个很有用的方法就是 peek() ,本文将详细介绍其功能及应用场景。 peek() 是Java 8 Stream API中的一个中间操作方法,它的主要功能是对流中的每个元素执行一个操作(可以

    2024年04月16日
    浏览(31)
  • java中的stream基本使用

    Stream流把真正的函数式编程风格引入到Java中,而且代码特别简介。 1、获取Stream流 2、中间方法 3、终结方法 Collection体系集合 使用默认方法stream()生成流, default Stream stream() Map体系集合 把Map转成Set集合,间接的生成流 数组 通过Arrays中的静态方法stream生成流 同种数据类型的

    2024年02月15日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包