贵州企业网站建设招商,90设计赚钱,百度推广搜索排名,商丘市网站建设推广往期回顾
[Java基础] 基本数据类型
[Java基础] 运算符
[Java基础] 流程控制
[Java基础] 面向对象编程
[Java基础] 集合框架
[Java基础] 输入输出流
[Java基础] 异常处理机制
[Java基础] Lambda 表达式
目录
概述
Lambda 表达式的基本语法
应用场景
并发编程
集合…往期回顾
[Java基础] 基本数据类型
[Java基础] 运算符
[Java基础] 流程控制
[Java基础] 面向对象编程
[Java基础] 集合框架
[Java基础] 输入输出流
[Java基础] 异常处理机制
[Java基础] Lambda 表达式
目录
概述
Lambda 表达式的基本语法
应用场景
并发编程
集合操作
事件处理
排序
函数式接口
数据处理
自定义函数式接口
总结 概述
Java 8 引入了 Lambda 表达式这是一种简化代码、提高可读性和表达力的新特性。Lambda 表达式允许你以函数的形式传递代码块从而实现函数式编程的一些概念。下面是对 Lambda 表达式的详细介绍以及一些实战案例。
Lambda 表达式的基本语法
Lambda 表达式的基本语法如下
(parameters) - expression
或者
(parameters) - { statements; }
组件说明
参数列表可以有零个或多个参数参数类型可以省略编译器会根据上下文推断类型。箭头- 将参数列表与主体部分分开。主体可以是一个表达式或一个代码块。如果主体是一个表达式则不需要使用大括号如果是代码块则需要使用大括号 {} 包围。
应用场景
Java Lambda 表达式在多种场景下都非常有用可以显著提高代码的简洁性和可读性。以下是 Lambda 表达式的一些常见应用场景
并发编程
在多线程编程中Lambda 表达式可以简化 Runnable 和 Callable 的实现。
示例使用 Lambda 表达式创建线程
public class LambdaRunnableExample {public static void main(String[] args) {// 传统方式new Thread(new Runnable() {Overridepublic void run() {System.out.println(传统方式运行线程);}}).start();// 使用 Lambda 表达式new Thread(() - {System.out.println(使用 Lambda 表达式运行线程);}).start();}
}
集合操作
Lambda 表达式与 Stream API 结合使用可以高效地处理集合数据。
示例使用 Stream API 过滤和转换列表
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;public class StreamExample {public static void main(String[] args) {ListString names new ArrayList();names.add(Alice);names.add(Bob);names.add(Charlie);names.add(David);// 使用 Stream API 过滤并转换列表ListString upperCaseNames names.stream().filter(name - name.length() 3).map(String::toUpperCase).collect(Collectors.toList());System.out.println(过滤并转换后的列表: upperCaseNames); // 输出: [ALICE, CHARLIE, DAVID]}
}
事件处理
在图形用户界面GUI编程中Lambda 表达式可以简化事件处理器的实现。
示例使用 Lambda 表达式处理按钮点击事件
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class LambdaEventExample {public static void main(String[] args) {JFrame frame new JFrame(Lambda Event Example);JButton button new JButton(Click me);// 传统方式button.addActionListener(new ActionListener() {Overridepublic void actionPerformed(ActionEvent e) {System.out.println(传统方式处理点击事件);}});// 使用 Lambda 表达式button.addActionListener(e - System.out.println(使用 Lambda 表达式处理点击事件));frame.add(button);frame.setSize(300, 200);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);}
}
排序
Lambda 表达式可以简化 Comparator 的实现用于对集合进行排序。
示例使用 Lambda 表达式实现 Comparator
import java.util.Arrays;
import java.util.List;public class LambdaComparatorExample {public static void main(String[] args) {ListString names Arrays.asList(Alice, Bob, Charlie, David);// 传统方式names.sort(new java.util.ComparatorString() {Overridepublic int compare(String s1, String s2) {return s1.compareTo(s2);}});System.out.println(传统方式排序: names);// 使用 Lambda 表达式names.sort((s1, s2) - s1.compareTo(s2));System.out.println(使用 Lambda 表达式排序: names);}
}
函数式接口
Lambda 表达式可以实现函数式接口如 Function、Predicate、Consumer 和 Supplier 等。
示例使用 Lambda 表达式实现 Function
import java.util.function.Function;public class LambdaFunctionExample {public static void main(String[] args) {// 定义一个 Function将字符串转换为大写FunctionString, String toUpperCase s - s.toUpperCase();// 使用 FunctionString result toUpperCase.apply(hello world);System.out.println(result); // 输出: HELLO WORLD}
}
数据处理
Lambda 表达式可以用于数据处理任务如过滤、映射和归约操作。
示例使用 Stream API 进行数据处理
import java.util.Arrays;
import java.util.List;
import java.util.Optional;public class DataProcessingExample {public static void main(String[] args) {ListInteger numbers Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);// 找到第一个偶数OptionalInteger firstEven numbers.stream().filter(n - n % 2 0).findFirst();firstEven.ifPresent(System.out::println); // 输出: 2// 计算所有偶数的平方和int sumOfSquares numbers.stream().filter(n - n % 2 0).map(n - n * n).reduce(0, Integer::sum);System.out.println(偶数的平方和: sumOfSquares); // 输出: 220}
}
自定义函数式接口
你可以定义自己的函数式接口并使用 Lambda 表达式实现它们。
示例自定义函数式接口
FunctionalInterface
interface MyFunction {int apply(int x, int y);
}public class CustomFunctionExample {public static void main(String[] args) {// 定义一个 Lambda 表达式MyFunction add (x, y) - x y;// 使用 Lambda 表达式int result add.apply(5, 3);System.out.println(5 3 result); // 输出: 5 3 8}
}
总结
Lambda 表达式在多种场景下都非常有用可以简化代码、提高可读性和表达力。通过上述示例你可以看到 Lambda 表达式在并发编程、集合操作、事件处理、排序、函数式接口、数据处理和自定义函数式接口等场景中的应用。希望这些示例能帮助你更好地理解和使用 Lambda 表达式。