### Java函数式编程Lambda表达式与StreamAPI实战指南

#### 一、Lambda表达式基础

1. 语法结构

```java

(parameters) -> expression

(parameters) -> { statements; }

```

2. 类型推断机制

- 编译器根据上下文自动推断参数类型

- 可省略参数类型声明

3. 方法引用

- 静态方法引用:ClassName::staticMethod

- 实例方法引用:instance::method

- 构造方法引用:ClassName::new

#### 二、函数式接口应用

1. 常用内置接口

- Predicate:条件判断

- Function:类型转换

- Consumer:数据消费

- Supplier:数据供给

2. 自定义函数式接口

```java

@FunctionalInterface

interface StringProcessor {

String process(String str);

}

```

#### 三、Stream API核心操作

1. 创建流

```java

// 集合创建流

List list = Arrays.asList(a, b, c);

Stream stream = list.stream();

// 数组创建流

String[] array = {a, b, c};

Stream stream = Arrays.stream(array);

// 直接创建流

Stream stream = Stream.of(a, b, c);

```

2. 中间操作

- filter(Predicate):数据过滤

- map(Function):数据转换

- sorted(Comparator):数据排序

- distinct():去重操作

3. 终止操作

- collect(Collector):结果收集

- forEach(Consumer):遍历处理

- reduce(BinaryOperator):归约计算

- count():元素计数

#### 四、实战案例演示

1. 数据过滤与转换

```java

List users = getUserList();

List names = users.stream()

.filter(user -> user.getAge() > 18)

.map(User::getName)

.collect(Collectors.toList());

```

2. 分组统计操作

```java

Map countByDept = employees.stream()

.collect(Collectors.groupingBy(

Employee::getDepartment,

Collectors.counting()

));

```

3. 并行流处理

```java

List numbers = Arrays.asList(1, 2, 3, 4, 5);

int sum = numbers.parallelStream()

.mapToInt(Integer::intValue)

.sum();

```

#### 五、性能优化要点

1. 避免状态操作

- 确保lambda表达式无副作用

- 优先使用无状态中间操作

2. 合理使用并行流

- 数据量较大时考虑并行处理

- 注意线程安全问题

3. 短路操作优化

- 尽早使用filter减少后续操作数据量

- 合理使用limit、findFirst等短路操作

#### 六、最佳实践建议

1. 保持lambda表达式简洁

2. 合理使用方法引用提升可读性

3. 注意异常处理机制

4. 适时使用Optional避免空指针

通过掌握Lambda表达式和Stream API,开发者能够编写出更简洁、高效且易于维护的Java代码,充分发挥函数式编程的优势。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐