edit lambda

This commit is contained in:
many2many 2024-10-24 09:46:22 +08:00
parent 27e092a7d3
commit ae4f7fcf79

View File

@ -175,7 +175,7 @@ interface Greeting {
}
Greeting greet = (String name) -> System.out.println("Hello, " + name);
greet.greet("Kimi"); // 输出 "Hello, Kimi"
greet.greet("Java"); // 输出 "Hello, java"
```
###### 一个参数和有返回值
@ -183,11 +183,11 @@ greet.greet("Kimi"); // 输出 "Hello, Kimi"
```java
@FunctionalInterface
interface Converter {
String convert(String from, String to);
String convert(String from);
}
Converter converter = (from, to) -> from.toUpperCase() + to.toLowerCase();
System.out.println(converter.convert("Java", "Python")); // 输出 "JAVApython"
Converter converter = (from, to) -> from.toUpperCase();
System.out.println(converter.convert("Java")); // 输出 "JAVA"
```
###### 多个参数和有返回值
@ -208,23 +208,91 @@ System.out.println(add.calculate(5, 10)); // 输出 15
###### 静态方法引用
静态方法/类方法static修饰的方法引用
> 语法: 类名::方法名
**注意事项:**
- 被引用的方法参数列表和函数式接口中抽象方法的参数一致!!
- 接口的抽象方法没有返回值,引用的方法可以有返回值也可以
- 接口的抽象方法有返回值,引用的方法必须有相同类型的返回值!!
- 由于满足抽象参数列表与引用参数列表相同,所以可以写成静态方法引用的格式
```java
Converter concat = String::concat;
System.out.println(concat.convert("Hello, ", "Kimi")); // 输出 "Hello, KimiHello, "
public class StringUtils {
public static String concatenate(String from, String to) {
return from + ", " + to;
}
}
```
```java
Converter concat = StringUtils::concatenate;
System.out.println(concat.convert("Hello", "Lambda")); // 输出 "Hello, Lambda"
```
###### 实例方法引用
实例方法非static修饰的方法引用
> 语法: 对象名:∶非静态方法名
**注意事项:**
- 被引用的方法参数列表和函数式接口中抽象方法的参数一致!!
- 接口的抽象方法没有返回值,引用的方法可以有返回值也可以没有
- 接口的抽象方法有返回值,引用的方法必须有相同类型的返回值!
```java
Converter append = StringBuilder::append;
System.out.println(append.convert("Hello, ", "Kimi")); // 输出 "Hello, Kimi"
public class Combiner {
public String combine(String part1, String part2) {
return part1.toUpperCase() + ", " + part2.toUpperCase();
}
}
```
```java
Combiner combiner = new Combiner();
Converter append = combiner::combie;
System.out.println(append.convert("Hello", "Lambda")); // 输出 "Hello, Lambda"
```
###### 构造函数引用
构造方法引用
> 语法: 类名::new
**注意事项:**
- 被引用的类必须存在一个构造方法与函数式接口的抽象方法参数列表一致
```java
Converter toStringBuilder = StringBuilder::new;
System.out.println(toStringBuilder.convert("Hello, ", "Kimi")); // 输出 "Hello, Kimi"
// 假设我们有一个简单的类
class Example {
private final int value;
public Example(int value) {
this.value = value;
}
@Override
public String toString() {
return "Example{" + "value=" + value + '}';
}
}
// 接口定义需要与Example的构造函数匹配
interface ExampleSupplier {
Example get();
}
public class Main {
public static void main(String[] args) {
// 使用lambda表达式和构造函数引用创建ExampleSupplier实例
ExampleSupplier supplier = () -> new Example(42);
// 使用ExampleSupplier实例来创建Example对象
Example example = supplier.get();
// 输出结果
System.out.println(example);
}
}
```
##### Lambda 表达式与 Stream API