java8函数式编程详解
时间: 2023-11-24 15:53:15 浏览: 111
Java 8 引入了函数式编程的概念,其中最重要的两个特性是 Lambda 表达式和 Stream API。下面将对这两个特性进行详细介绍。
1. Lambda 表达式
Lambda 表达式是一种匿名函数,它可以作为参数传递给方法或存储在变量中。Lambda 表达式的语法如下:
```
(parameter1, parameter2, ..., parameterN) -> { statement1; statement2; ... }
```
其中,参数列表可以为空,也可以包含多个参数;箭头符号 "->" 用于将参数列表和 Lambda 表达式的主体分开;体可以是一个语句块,也可以是一个表达式。
下面是一个 Lambda 表达式的例子:
```java
(int x, int y) -> { return x + y; }
```
这个 Lambda 表达式接受两个整数参数 x 和 y,返回它们的和。
Lambda 表达式可以用于函数式接口,即只包含一个抽象方法的接口。例如,下面是一个函数式接口的定义:
```java
interface MyInterface {
int myMethod(int x, int y);
}
```
可以使用 Lambda 表达式来实现这个接口:
```java
MyInterface obj = (int x, int y) -> { return x + y; };
```
Lambda 表达式还可以使用方法引用来简化代码。例如,可以使用静态方法引用来实现上面的例子:
```java
MyInterface obj = Integer::sum;
```
2. Stream API
Stream API 是一种用于处理集合的 API,它提供了一种流式处理集合的方式。Stream API 可以用于对集合进行过滤、映射、排序等操作。
下面是一个使用 Stream API 进行过滤和映射的例子:
```java
List<String> list = Arrays.asList("apple", "banana", "orange", "pear");
List<String> result = list.stream()
.filter(s -> s.startsWith("a"))
.map(String::toUpperCase)
.collect(Collectors.toList());
```
这个例子首先创建了一个包含四个字符串的列表,然后使用 stream() 方法将其转换为一个流。接着使用 filter() 方法过滤出以字母 "a" 开头的字符串,再使用 map() 方法将这些字符串转换为大写形式。最后使用 collect() 方法将结果收集到一个列表中。
阅读全文