博客
关于我
系统学习Lambda表达式
阅读量:796 次
发布时间:2023-03-22

本文共 2284 字,大约阅读时间需要 7 分钟。

Java Lambda 表达式入门

1. 语法

Lambda表达式是一种匿名函数,在Java中被称为闭包。它的语法分为两种风格:表达式风格和块风格。

表达式风格

(parameters) -> expression

表达式风格的Lambda表达式直接由一个表达式组成,适合简单的操作。

块风格

(parameters) -> { statements; }

块风格的Lambda表达式由花括号包裹的代码块组成,适合复杂的逻辑操作。

2. 函数式接口

Lambda表达式可以看作匿名内部类的实现,但它只能用于函数式接口。函数式接口是指只定义一个抽象方法的接口。

常见函数式接口

Comparator

public interface Comparator
{
int compare(T o1, T o2);
}

Lambda表达式示例:

Comparator
comparator = (a, b) -> a - b;

Runnable

public interface Runnable {
void run();
}

Lambda表达式示例:

Runnable runnable = () -> System.out.println("Hello World");

Callable

public interface Callable
{
V call() throws Exception;
}

Lambda表达式示例:

Callable
callable = () -> "Hello World";

3. 常用函数式接口

Predicate

表示一个布尔表达式。

public interface Predicate
{
boolean test(T t);
}

Lambda表达式示例:

Predicate
predicate = s -> s.length() == 5;

Consumer

表示对某个对象执行操作。

public interface Consumer
{
void accept(T t);
}

Lambda表达式示例:

Consumer
consumer = s -> System.out.println(s);

Supplier

表示生成一个对象。

public interface Supplier
{
T get();
}

Lambda表达式示例:

Supplier
supplier = () -> "Hello";

Function

表示将一个对象转换为另一个对象。

public interface Function
{
R apply(T t);
}

Lambda表达式示例:

Function
function = s -> s.length();

4. 方法引用

方法引用是一种更简洁的Lambda表达式写法,形式为 目标引用::方法名称

静态方法引用

Function
function = Integer::parseInt;

实例方法引用

Function
function = String::length;

外部对象引用

String s = "Hello";
Function
function = s::length;

5. 复合Lambda表达式

Comparator复合

List
apples = Arrays.asList(new Apple("红色", 50), new Apple("红色", 100), new Apple("绿色", 100));
apples.sort(Comparator.comparing(Apple::getWeight).reversed());

Predicate复合

Predicate
heavyAndRed = heavyApple.and(redApple);

Function复合

Function
f = x -> x + 1;
Function
g = x -> x * 2;
Function
h = f.andThen(g);
int result = h.apply(1); // 4

6. 方法引用与Lambda表达式

方法引用可以与Lambda表达式结合使用,实现更简洁的代码。

Function
function = s -> s.length();
// 可以改写为
Function
function = String::length;

7. 常用工具类

Comparator工具类

Comparator.comparing(Function
keyExtractor)

Predicate工具类

Predicate.not(Predicate
predicate)

通过这些工具类,可以轻松构建复杂的函数式逻辑。

转载地址:http://fdqfk.baihongyu.com/

你可能感兴趣的文章
Objective-C实现文件的删除、复制与重命名操作实例(附完整源码)
查看>>
Objective-C实现无序表查找算法(附完整源码)
查看>>
Objective-C实现无锁链表(附完整源码)
查看>>
Objective-C实现无锁链表(附完整源码)
查看>>
Objective-C实现时间戳转为年月日时分秒(附完整源码)
查看>>
Objective-C实现是否为 Pythagoreantriplet 毕氏三元数组算法(附完整源码)
查看>>
Objective-C实现显示响应算法(附完整源码)
查看>>
Objective-C实现晚捆绑测试实例(附完整源码)
查看>>
Objective-C实现普通矩阵A和B的乘积(附完整源码)
查看>>
Objective-C实现更新数字指定偏移量上的值updateBit算法(附完整源码)
查看>>
Objective-C实现最大类间方差法OTSU算法(附完整源码)
查看>>
Objective-C实现最大非相邻和算法(附完整源码)
查看>>
Objective-C实现最小二乘多项式曲线拟合(附完整源码)
查看>>
Objective-C实现最小路径和算法(附完整源码)
查看>>
Objective-C实现最快的归并排序算法(附完整源码)
查看>>
Objective-C实现最长公共子序列算法(附完整源码)
查看>>
Objective-C实现最长回文子串算法(附完整源码)
查看>>
Objective-C实现最长回文子序列算法(附完整源码)
查看>>
Objective-C实现最长子数组算法(附完整源码)
查看>>
Objective-C实现最长字符串链(附完整源码)
查看>>