Java Stream API 操作完全攻略:让你的代码更加出色 (一)

简介: 使用 Stream 操作可以大大简化代码,使其更具可读性和可维护性,从而提高开发效率。本文将为您介绍 Java Stream 操作的所有方面,包括 filter、map、distinct、sorted等

前言

  Java Stream 是一种强大的数据处理工具,可以帮助开发人员快速高效地处理和转换数据流。使用 Stream 操作可以大大简化代码,使其更具可读性和可维护性,从而提高开发效率。本文将为您介绍 Java Stream 操作的所有方面,包括 filter、map、distinct、sorted 等操作,让您的代码行云流水,更加优雅。

  1. filter():根据指定的 Predicate 保留符合条件的元素。
  2. map():根据指定的 Function 映射每个元素,生成一个新的 Stream。
  3. flatMap():将每个元素映射为一个 Stream,然后将这些 Stream 连接成一个 Stream。
  4. distinct():返回一个去重后的 Stream。
  5. sorted():对 Stream 进行排序。
  6. peek():对每个元素执行指定的操作,但并不消费元素。
  7. limit():返回一个截断后的 Stream。
  8. skip():返回一个跳过指定元素后的 Stream。
  9. forEach():对每个元素执行指定的操作。
  10. toArray():将 Stream 转换为数组。

示例

示例 1:使用 filter() 方法过滤奇数

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Example {
   
   
    public static void main(String[] args) {
   
   
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

        List<Integer> evenNumbers = numbers.stream()
                .filter(n -> n % 2 == 0)
                .collect(Collectors.toList());

        System.out.println("Even numbers: " + evenNumbers);
    }
}

输出结果:

Even numbers: [2, 4, 6, 8, 10]

示例 2:使用 map() 方法将每个字符串转换为大写

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Example {
   
   
    public static void main(String[] args) {
   
   
        List<String> words = Arrays.asList("hello", "world", "java", "stream");

        List<String> capitalizedWords = words.stream()
                .map(String::toUpperCase)
                .collect(Collectors.toList());

        System.out.println("Capitalized words: " + capitalizedWords);
    }
}

输出结果:

Capitalized words: [HELLO, WORLD, JAVA, STREAM]

示例 3:使用 flatMap() 方法将嵌套的列表展平为一个列表

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Example {
   
   
    public static void main(String[] args) {
   
   
        List<List<Integer>> nestedNumbers = Arrays.asList(
                Arrays.asList(1, 2),
                Arrays.asList(3, 4, 5),
                Arrays.asList(6, 7, 8, 9)
        );

        List<Integer> flattenedNumbers = nestedNumbers.stream()
                .flatMap(List::stream)
                .collect(Collectors.toList());

        System.out.println("Flattened numbers: " + flattenedNumbers);
    }
}

输出结果:

Flattened numbers: [1, 2, 3, 4, 5, 6, 7, 8, 9]

示例 4:使用 distinct() 方法去除重复元素

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Example {
   
   
    public static void main(String[] args) {
   
   
        List<Integer> numbers = Arrays.asList(1, 2, 3, 2, 1, 4, 5, 4, 3, 6);

        List<Integer> distinctNumbers = numbers.stream()
                .distinct()
                .collect(Collectors.toList());

        System.out.println("Distinct numbers: " + distinctNumbers);
    }
}

输出结果:

Distinct numbers: [1, 2, 3, 4, 5, 6]

示例 5:使用 sorted() 方法对 Stream 进行排序

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Example {
   
   
    public static void main(String[] args) {
   
   
        List<Integer> numbers = Arrays.asList(5, 3, 8, 2, 9, 1, 7, 4, 6, 10);

        List<Integer> sortedNumbers = numbers.stream()
                .sorted()
                .collect(Collectors.toList());

        System.out.println("Sorted numbers: " + sortedNumbers);
    }
}

输出结果:

Sorted numbers: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

示例 6:使用 peek() 方法打印每个元素并统计元素个数

import java.util.Arrays;
import java.util.List;

public class Example {
   
   
    public static void main(String[] args) {
   
   
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

        int count = numbers.stream()
                .peek(System.out::println)
                .mapToInt(Integer::intValue)
                .sum();

        System.out.println("Total count: " + count);
    }
}

输出结果:

1
2
3
4
5
6
7
8
9
10
Total count: 55

示例 7:使用 limit() 方法限制结果集大小

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Example {
   
   
    public static void main(String[] args) {
   
   
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

        List<Integer> limitedNumbers = numbers.stream()
                .limit(5)
                .collect(Collectors.toList());

        System.out.println("Limited numbers: " + limitedNumbers);
    }
}

输出结果:

Limited numbers: [1, 2, 3, 4, 5]

示例 8:使用 skip() 方法跳过前面的元素

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Example {
   
   
    public static void main(String[] args) {
   
   
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

        List<Integer> skippedNumbers = numbers.stream()
                .skip(5)
                .collect(Collectors.toList());

        System.out.println("Skipped numbers: " + skippedNumbers);
    }
}

输出结果:

Skipped numbers: [6, 7, 8, 9, 10]

示例 9:使用 forEach() 方法打印每个元素

import java.util.Arrays;
import java.util.List;

public class Example {
   
   
    public static void main(String[] args) {
   
   
        List<String> words = Arrays.asList("hello", "world", "java", "stream");

        words.stream()
                .forEach(System.out::println);
    }
}

输出结果:

hello
world
java
stream

示例 10:使用 toArray() 方法将 Stream 转换为数组

import java.util.Arrays;
import java.util.List;

public class Example {
   
   
    public static void main(String[] args) {
   
   
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

        Integer[] numberArray = numbers.stream()
                .toArray(Integer[]::new);

        System.out.println("Number array: " + Arrays.toString(numberArray));
    }
}

输出结果:

Number array: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

结尾

  如果觉得对你有帮助,可以多多评论,多多点赞哦,也可以到我的主页看看,说不定有你喜欢的文章,也可以随手点个关注哦,谢谢。

  我是不一样的科技宅,每天进步一点点,体验不一样的生活。我们下期见!

相关文章
|
4天前
|
JSON API 数据安全/隐私保护
淘宝评论API接口操作步骤详解,代码示例参考
淘宝评论API接口是淘宝开放平台提供的一项服务,通过该接口,开发者可以访问商品的用户评价和评论。这些评论通常包括评分、文字描述、图片或视频等内容。商家可以利用这些信息更好地了解消费者的需求和偏好,优化产品和服务。同时,消费者也可以从这些评论中获得准确的购买参考,做出更明智的购买决策。
|
9天前
|
算法 Java API
如何使用Java开发获得淘宝商品描述API接口?
本文详细介绍如何使用Java开发调用淘宝商品描述API接口,涵盖从注册淘宝开放平台账号、阅读平台规则、创建应用并申请接口权限,到安装开发工具、配置开发环境、获取访问令牌,以及具体的Java代码实现和注意事项。通过遵循这些步骤,开发者可以高效地获取商品详情、描述及图片等信息,为项目和业务增添价值。
40 10
|
2天前
|
前端开发 Java 测试技术
java日常开发中如何写出优雅的好维护的代码
代码可读性太差,实际是给团队后续开发中埋坑,优化在平时,没有那个团队会说我专门给你一个月来优化之前的代码,所以在日常开发中就要多注意可读性问题,不要写出几天之后自己都看不懂的代码。
34 2
|
14天前
|
API Python
【Azure Developer】分享一段Python代码调用Graph API创建用户的示例
分享一段Python代码调用Graph API创建用户的示例
38 11
|
17天前
|
Java 编译器 数据库
Java 中的注解(Annotations):代码中的 “元数据” 魔法
Java注解是代码中的“元数据”标签,不直接参与业务逻辑,但在编译或运行时提供重要信息。本文介绍了注解的基础语法、内置注解的应用场景,以及如何自定义注解和结合AOP技术实现方法执行日志记录,展示了注解在提升代码质量、简化开发流程和增强程序功能方面的强大作用。
54 5
|
17天前
|
存储 算法 Java
Java 内存管理与优化:掌控堆与栈,雕琢高效代码
Java内存管理与优化是提升程序性能的关键。掌握堆与栈的运作机制,学习如何有效管理内存资源,雕琢出更加高效的代码,是每个Java开发者必备的技能。
45 5
|
17天前
|
存储 Java 数据挖掘
Java 8 新特性之 Stream API:函数式编程风格的数据处理范式
Java 8 引入的 Stream API 提供了一种新的数据处理方式,支持函数式编程风格,能够高效、简洁地处理集合数据,实现过滤、映射、聚合等操作。
34 6
|
17天前
|
Java API 开发者
Java中的Lambda表达式与Stream API的协同作用
在本文中,我们将探讨Java 8引入的Lambda表达式和Stream API如何改变我们处理集合和数组的方式。Lambda表达式提供了一种简洁的方法来表达代码块,而Stream API则允许我们对数据流进行高级操作,如过滤、映射和归约。通过结合使用这两种技术,我们可以以声明式的方式编写更简洁、更易于理解和维护的代码。本文将介绍Lambda表达式和Stream API的基本概念,并通过示例展示它们在实际项目中的应用。
|
7天前
|
Rust 安全 Java
Java Stream 使用指南
本文介绍了Java中Stream流的使用方法,包括如何创建Stream流、中间操作(如map、filter、sorted等)和终结操作(如collect、forEach等)。此外,还讲解了并行流的概念及其可能带来的线程安全问题,并给出了示例代码。
|
16天前
|
安全 Java API
Java中的Lambda表达式:简化代码的现代魔法
在Java 8的发布中,Lambda表达式的引入无疑是一场编程范式的革命。它不仅让代码变得更加简洁,还使得函数式编程在Java中成为可能。本文将深入探讨Lambda表达式如何改变我们编写和维护Java代码的方式,以及它是如何提升我们编码效率的。