首页 > 编程语言 >Java Lambda表达式与函数式接口和Stream API的常用方法

Java Lambda表达式与函数式接口和Stream API的常用方法

时间:2024-11-11 22:19:29浏览次数:5  
标签:Java Stream stream 示例 List 用途 collect API numbers

Java Lambda表达式常与函数式接口和流(Stream API)一起使用,提供了非常强大的方式来处理集合和其他数据结构。以下是一些常用的Lambda表达式方法和它们的用途,特别是在结合java.util.stream.Stream时:

1. map()

  • 用途:用于将流中的每个元素转换成另一种形式。
  • 示例
    List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
    List<String> upperCaseNames = names.stream()
                                       .map(name -> name.toUpperCase())
                                       .collect(Collectors.toList());
    

2. filter()

  • 用途:用于过滤出满足特定条件的元素。
  • 示例
    List<Integer> numbers = Arrays.asList(6, ⅔, 4, 5, 6, 7, 8, 9, 10);
    List<Integer> evenNumbers = numbers.stream()
                                       .filter(n -> n % 2 == 0)
                                       .collect(Collectors.toList());
    

3. reduce()

  • 用途:用于将流中的所有元素合并成一个单一的结果。
  • 示例
    int sum = numbers.stream()
                     .reduce(0, (a, b) -> a + b); // 或者使用 Integer::sum
    

4. forEach()

  • 用途:用于对流中的每个元素执行某个操作。
  • 示例
    names.forEach(name -> System.out.println(name));
    

5. sorted()

  • 用途:用于对流中的元素进行排序。
  • 示例
    List<String> sortedNames = names.stream()
                                    .sorted()
                                    .collect(Collectors.toList());
    

6. collect()

  • 用途:用于将流中的元素收集到一个集合中。
  • 示例
    List<Integer> collectedNumbers = numbers.stream()
                                            .collect(Collectors.toList());
    

7. peek()

  • 用途:用于在流的每个元素上执行一个操作,同时保持流继续下去。
  • 示例
    List<Integer> peekedNumbers = numbers.stream()
                                         .peek(n -> System.out.println("Processing: " + n))
                                         .collect(Collectors.toList());
    

8. anyMatch(), allMatch(), noneMatch()

  • 用途:用于检查流中的元素是否满足给定的条件。
  • 示例
    boolean hasEvenNumber = numbers.stream().anyMatch(n -> n % 2 == 0);
    boolean allPositive = numbers.stream().allMatch(n -> n > 0);
    boolean noZeroes = numbers.stream().noneMatch(n -> n == 0);
    

9. findFirst(), findAny()

  • 用途:用于找到流中的第一个或任意一个元素。
  • 示例
    Optional<Integer> firstEven = numbers.stream()
                                          .filter(n -> n % 2 == 0)
                                          .findFirst();
    Optional<Integer> anyEven = numbers.parallelStream()
                                        .filter(n -> n % 2 == 0)
                                        .findAny();
    
person -> person.getName() 和  Person::getName  作用一样
但是使用方法引用 Person::getName 更加简洁明了,因为它是直接引用了已存在的方法。

方法引用有几种形式:

静态方法引用:ClassName::staticMethodName
实例方法引用:object::instanceMethodName 或 ClassName::instanceMethodName
构造方法引用:ClassName::new
在 Person::getName 这个例子中,它属于实例方法引用,因为它引用的是 Person 类实例的方法。

这些方法可以帮助你更有效地处理数据,特别是在处理大量数据时,利用并行流(parallelStream())还可以进一步提高处理效率。Lambda表达式使得代码更加简洁和直观,是现代Java编程中非常重要的部分。

标签:Java,Stream,stream,示例,List,用途,collect,API,numbers
From: https://blog.csdn.net/weixin_48809422/article/details/143696447

相关文章

  • Java中包装类型和基本类型的区别:深入理解与应用
    Java中包装类型和基本类型的区别:深入理解与应用引言在Java编程中,基本类型(PrimitiveTypes)和包装类型(WrapperTypes)是两种不同的数据类型。基本类型是Java语言的核心部分,而包装类型则是为了提供更多的功能和灵活性。本文将深入探讨Java中包装类型和基本类型的区别,帮助你更......
  • 深入理解Java动态代理:原理、实现与应用
    深入理解Java动态代理:原理、实现与应用在现代软件开发中,面向对象编程(OOP)和面向切面编程(AOP)是两种重要的编程范式。Java语言中的动态代理(DynamicProxy)是实现AOP的关键技术之一,它允许我们在运行时创建一个代理对象,该代理对象可以拦截对真实对象方法的调用,并在方法调用前......
  • 运用Windows API进行编程
    目录运用WindowsAPI进行编程实验环境窗口创建基本流程基本代码流程1、头文件和库2、全局变量和函数3、入口主函数4、注册窗口类函数5、创建和显示窗口函数6、窗口过程函数运行结果实验小结运用WindowsAPI进行编程运行Windows应用程序在桌面显示Windows窗口。窗口内背景色为灰......
  • Windows API窗口绘图程序设计
    目录WindowsAPI窗口绘图程序设计1、窗口过程函数2、WM_LBUTTONDOWN:处理鼠标左键按下的消息鼠标消息相关知识点基本鼠标消息双击消息附带信息滚轮消息附带信息:3、WM_PAINT:处理窗口重绘的消息窗口绘图相关知识点窗口绘图基本流程开始绘画绘制封闭图形(能使用画刷填充的图形)GDI绘图......
  • Java 8 Optional:用法和问题与解决示范
    1.引言Java8引入了Optional类来解决传统空指针异常(NullPointerException)的问题。Optional是一个容器类,专门用于表示可能包含或不包含非空值的对象。本文将深入探讨Optional的常见用法、常见问题及其解决方案,以及在实际项目中如何利用Optional优化代码结构,提高代......
  • 基于Java+SpringBoot+Mysql在线课程学习教育系统功能设计与实现三
    一、前言介绍:[免费获取]1.1项目摘要随着信息技术的飞速发展和互联网的普及,教育领域正经历着深刻的变革。传统的面对面教学模式逐渐受到挑战,而在线课程学习教育系统作为一种新兴的教育形式,正逐渐受到广泛关注和应用。在线课程学习教育系统的出现,不仅为学生提供了更加灵活、便......
  • Java实现常用加密算法-SM4
    参考博客:https://blog.csdn.net/m0_46713218/article/details/143099878参考博客:sm4前后端加密集成pom:<!--SM4加密依赖包--><dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk18on</artifactId><version>1.......
  • 基于Java+SpringBoot+Mysql在线课程学习教育系统功能设计与实现四
    一、前言介绍:免费获取:猿来入此1.1项目摘要随着信息技术的飞速发展和互联网的普及,教育领域正经历着深刻的变革。传统的面对面教学模式逐渐受到挑战,而在线课程学习教育系统作为一种新兴的教育形式,正逐渐受到广泛关注和应用。在线课程学习教育系统的出现,不仅为学生提供了更加灵......
  • Java毕设项目案例实战II基于Java+Spring Boot+MySQL的狱内罪犯危险性评估系统设计与实
    目录一、前言二、技术介绍三、系统实现四、核心代码五、源码获取全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。一、前言在司法体系中,狱内罪犯的危险性评估是确保监狱安全、提升管理效率的关键环节。传统......
  • 【JAVA基础】JAVA中是值传递还是引用传递?
    JAVA中是值传递还是引用传递?基本数据类型的值传递引用类型的值传递在Java中,参数传递实际上是通过值传递(pass-by-value)来实现的,但这一点在理解时可能会因为对象的存在而显得有些复杂。为了详细解释这一点,我们需要区分基本数据类型(如int,char,boolean等)和引用类型(如......