【JAVA进阶篇教学】第三篇:JDK8中Stream API使用

简介: 【JAVA进阶篇教学】第三篇:JDK8中Stream API使用

博主打算从0-1讲解下java进阶篇教学,今天教学第三篇:JDK8中Stream API使用。


Java 8 中的 Stream API 提供了一种便捷、高效的方式来处理集合数据,它支持函数式编程风格的操作,包括过滤、映射、归约等。Stream API 可以大大简化集合的处理代码,使得代码更加清晰和易于理解。下面我将列举 Stream API 中的几个常用方法,并给出相应的代码案例。  

一、常用的 Stream API 方法

1.filter()

filter()方法作用:用于过滤集合中的元素,只保留满足条件的元素。

示例代码:

List<String> languages = Arrays.asList("Java", "Python", "C++", "JavaScript");
 
// 过滤出以 "J" 开头的编程语言
List<String> filteredLanguages = languages.stream()
                                          .filter(language -> language.startsWith("J"))
                                          .collect(Collectors.toList());
System.out.println(filteredLanguages); // 输出:[Java, JavaScript]
[Java, JavaScript]

2.map()

map()方法 作用:用于对集合中的每个元素进行映射转换。

示例代码:

List<String> languages = Arrays.asList("Java", "Python", "C++", "JavaScript");
 
// 将所有编程语言转换为大写形式
List<String> upperCaseLanguages = languages.stream()
                                            .map(String::toUpperCase)
                                            .collect(Collectors.toList());
System.out.println(upperCaseLanguages); // 输出:[JAVA, PYTHON, C++, JAVASCRIPT]

3.collect()

collect()方法作用:将 Stream 元素转换为其他形式,比如 List、Set、Map 等。

示例代码:

List<String> languages = Arrays.asList("Java", "Python", "C++", "JavaScript");
 
// 将 Stream 转换为 List
List<String> languageList = languages.stream()
                                     .collect(Collectors.toList());

4.forEach()

forEach()方法作用:对集合中的每个元素执行指定操作。

示例代码:

List<String> languages = Arrays.asList("Java", "Python", "C++", "JavaScript");
 
// 打印每个编程语言
languages.forEach(System.out::println);

5.count()

count()方法作用:返回 Stream 中的元素个数。

示例代码:

List<String> languages = Arrays.asList("Java", "Python", "C++", "JavaScript");
 
// 统计编程语言的数量
long count = languages.stream().count();
System.out.println("Number of languages: " + count); // 输出:Number of languages: 4

这里其实你直接用languages.size(); 也可以获取到数量。

6.flatMap()

flatMap()方法作用:将多个 Stream 合并成一个 Stream。

示例代码:

List<List<String>> nestedList = Arrays.asList(
    Arrays.asList("Java", "Python"),
    Arrays.asList("C++", "JavaScript")
);
 
// 使用 flatMap 将多个 List 合并为一个 Stream
List<String> flatList = nestedList.stream()
                                  .flatMap(Collection::stream)
                                  .collect(Collectors.toList());
System.out.println(flatList); // 输出:[Java, Python, C++, JavaScript]

7.sorted()

sorted()方法作用:对 Stream 中的元素进行排序。

示例代码:

List<String> languages = Arrays.asList("Java", "Python", "C++", "JavaScript");
 
// 对编程语言按字母顺序进行排序
List<String> sortedLanguages = languages.stream()
                                        .sorted()
                                        .collect(Collectors.toList());
System.out.println(sortedLanguages); // 输出:[C++, Java, JavaScript, Python]

8.distinct()

distinct()方法作用:去除 Stream 中重复的元素。

示例代码:

List<String> languages = Arrays.asList("Java", "Python", "Java", "C++", "Python");
 
// 去除重复的编程语言
List<String> distinctLanguages = languages.stream()
                                           .distinct()
                                           .collect(Collectors.toList());
System.out.println(distinctLanguages); // 输出:[Java, Python, C++]

9.reduce()

reduce()方法作用:对 Stream 中的元素进行归约操作,得到一个结果。

示例代码:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
 
// 计算所有数字的和
int sum = numbers.stream()
                 .reduce(0, Integer::sum);
System.out.println("Sum of numbers: " + sum); // 输出:Sum of numbers: 15

10.findFirst()

findFirst()方法作用:返回 Stream 中的第一个元素(如果存在)。

示例代码:

List<String> languages = Arrays.asList("Java", "Python", "C++", "JavaScript");
 
// 找到第一个编程语言
Optional<String> firstLanguage = languages.stream().findFirst();
System.out.println("First language: " + firstLanguage.orElse("None")); // 输出:First language: Java

二、注意事项

  • Stream 是一种一次性的数据结构,一旦使用,就不能重复使用。
  • Stream 操作默认是惰性的,只有终端操作才会触发实际的计算。

1.list中元素自动拼接成字符串

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
 
public class JoiningExample {
    public static void main(String[] args) {
        List<String> languages = Arrays.asList("Java", "Python", "C++", "JavaScript");
 
        // 使用 Collectors.joining() 将元素拼接成字符串
        String result = languages.stream()
                                 .collect(Collectors.joining(", "));
        System.out.println(result); // 输出:Java, Python, C++, JavaScript
    }
}

以上是关于 Java 8 中 Stream API 的常用方法及其作用的说明和示例代码。Stream API 提供了一种更加优雅和高效的方式来处理集合数据,能够极大地简化代码,并提高代码的可读性和可维护性。

相关文章
|
15天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
45 2
|
13天前
|
IDE Java 编译器
开发 Java 程序一定要安装 JDK 吗
开发Java程序通常需要安装JDK(Java Development Kit),因为它包含了编译、运行和调试Java程序所需的各种工具和环境。不过,某些集成开发环境(IDE)可能内置了JDK,或可使用在线Java编辑器,无需单独安装。
|
1月前
|
Java API 数据处理
探索Java中的Lambda表达式与Stream API
【10月更文挑战第22天】 在Java编程中,Lambda表达式和Stream API是两个强大的功能,它们极大地简化了代码的编写和提高了开发效率。本文将深入探讨这两个概念的基本用法、优势以及在实际项目中的应用案例,帮助读者更好地理解和运用这些现代Java特性。
|
2月前
|
Java 流计算
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
43 1
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
|
2月前
|
Java Shell 流计算
Flink-02 Flink Java 3分钟上手 Stream SingleOutputStreamOpe ExecutionEnvironment DataSet FlatMapFunction
Flink-02 Flink Java 3分钟上手 Stream SingleOutputStreamOpe ExecutionEnvironment DataSet FlatMapFunction
25 1
Flink-02 Flink Java 3分钟上手 Stream SingleOutputStreamOpe ExecutionEnvironment DataSet FlatMapFunction
|
2月前
|
设计模式 Java API
[Java]静态代理与动态代理(基于JDK1.8)
本文介绍了代理模式及其分类,包括静态代理和动态代理。静态代理分为面向接口和面向继承两种形式,分别通过手动创建代理类实现;动态代理则利用反射技术,在运行时动态创建代理对象,分为JDK动态代理和Cglib动态代理。文中通过具体代码示例详细讲解了各种代理模式的实现方式和应用场景。
27 0
[Java]静态代理与动态代理(基于JDK1.8)
|
2月前
|
Java
Java基础之 JDK8 HashMap 源码分析(中间写出与JDK7的区别)
这篇文章详细分析了Java中HashMap的源码,包括JDK8与JDK7的区别、构造函数、put和get方法的实现,以及位运算法的应用,并讨论了JDK8中的优化,如链表转红黑树的阈值和扩容机制。
27 1
|
2月前
|
分布式计算 Java 大数据
大数据-147 Apache Kudu 常用 Java API 增删改查
大数据-147 Apache Kudu 常用 Java API 增删改查
33 1
|
2月前
|
存储 Java 数据处理
Flink-01 介绍Flink Java 3分钟上手 HelloWorld 和 Stream ExecutionEnvironment DataSet FlatMapFunction
Flink-01 介绍Flink Java 3分钟上手 HelloWorld 和 Stream ExecutionEnvironment DataSet FlatMapFunction
36 1
|
2月前
|
Java API 数据处理
java Stream详解
【10月更文挑战第4天】
30 0