java8函数式编程之Stream流处理的方法和案例讲解

本文深入探讨了Java8中的函数式编程,特别是Stream流处理。介绍了如何从集合、数组、文件等创建流,以及中间操作如filter、map、distinct、sorted和peek的使用。此外,详细讲解了终止操作,包括collect、reduce、forEach、count和max等,通过实例展示了Stream API的强大功能和简洁性。
摘要由CSDN通过智能技术生成

函数式编程最早是数学家阿隆佐·邱奇研究的一套函数变换逻辑,又称Lambda Calculus(λ-Calculus),所以也经常把函数式编程称为Lambda计算。

为什么Java需要Lambda表达式进行函数式编程呢?在我看来,有以下好处:

  • 1、面向对象编程是对数据进行抽象,而函数式编程是对行为进行抽象;
  • 2、增加Lambda表达式,让代码在多核服务器上更高效运行;
  • 3、一直以来,Java一直被诟病的地方,就是代码写得比较啰嗦,简单的CURD都要写好几行代码,Java8推出函数式编程后,啰嗦且冗长的代码得到极大改观,用Java也能写出简洁优美的代码。

不多啰嗦,下面开始函数式编程之Stream流处理的方法和案例讲解。

1. 引言

Streams API已在Java 8中引入,并且已经是Java语言规范的一部分多年了。尽管如此,平时的工作中,还是有很多项目还停留在java1.7中的使用中,而且java8的很多新特性都是革命性的,尤其是stream流处理。因此,这篇文章里,将介绍Streams的基本概念,并通过一些示例对其进行解释。

本文参考自官方Java文档java-stream流处理。与集合相比,Streams的一些特征(取自官方文档)如下:

  • 流不存储数据。相反,它们是数据的来源。
  • 流本质上是功能性的,这可能就是为什么流对大多数人来说很难理解的原因。它们产生一个结果,例如,像一个总和或一个新的流。
  • 流的许多操作都是惰性求值的(laziness-seeking)。操作可以是中间操作,也可以是终止操作。我们将在下一节中介绍这两者。惰性求值是指该操作只是对stream的一个描述,并不会马上执行。这类惰性的操作在stream中被称为中间操作(intermediate operations)。例如,查找流中元素的第一个匹配项。不必检查流的所有元素。找到第一个匹配项后,可以结束搜索。
  • 可能是无限的。只要流生成数据,流就不会结束。
  • 流的元素只能访问一次,和迭代器 Iterator 相似,当需要重复访问某个元素时,需要重新生成一个新的stream。

在接下来的部分中,我们将介绍如何创建 Streams,介绍一些中间操作,最后我们将介绍一些终止操作。这些源代码可以在结尾的github源码里提供,不需要自己复制粘贴。

2. 创建流源

有几种方法可以创建流。它们可以从集合,数组,文件等创建。在本节中,我们将创建一些测试,向您展示如何以不同的方式创建流。我们将创建并使用终止操作,以便将 消费到 .我们不对 执行任何其他操作,我们将它留给其他部分。最后,我们断言是否与我们期望的相同。测试位于单元测试中。

2.1 从集合创建流

使用 java.util.Collection.stream() 方法

private static final List<String> stringsList = Arrays.asList("a", "b", "c");

@Test
public void createStreamsFromCollection() {
    List<String> streamedStrings = stringsList.stream().collect(Collectors.toList());
    assertLinesMatch(stringsList, streamedStrings);
}
复制代码

2.2 从数组创建流

使用 java.util.Arrays.stream(T[]array)方法

@Test
public void createStreamsFromArrays() {
    List<String> streamedStrings = Arrays.stream(new String[]{"a", "b", "c"}).collect(Collectors.toList());
    assertLinesMatch(stringsList, streamedStrings);
}
复制代码

2.3 从流创建流。

使用 Stream的静态方法:of()、iterate()、generate()

@Test
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值