Lambda表达式

可以简单的理解为可传递的的匿名函数的一种方式,可以使用在函数式接口上,包含参数列表,函数体,返回类型,异常列表

基本语法:

// 标准写法
(parameters) -> { expression; }

// 函数体只有一行时,可以省略花括号
(parameters) -> expression
    
// 参数列表只有一个时,可以省略小括号
parameter -> expression

函数式接口

定义:函数式接口就是只定义一个抽象方法的接口(可以定义默认方法)

Lambda表达式可以为函数式接口的抽象方法提供实现,并把整个表达式作为函数式接口的实例

Runnable runnable1 = () -> System.out.println("Hello World1");
Runnable runnable2 = new Runnable() {
	@Override
	public void run() {
		System.out.println("Hello World2");
    }
};

runnable1.run();
runnable2.run();

常用的函数式接口

Predicate

java.util.function.Predicate

Predicate接口定义了一个名叫test的抽象方法,它接受泛型T对象,并返回一个boolean

// 使用示例
public static void main(String[] args) {
    List<String> list = Arrays.asList("斫峰之刃", "薙草之稻光", "四风原典", "天空之卷", "狼的末路", "风鹰剑", "阿莫斯之弓", "终末嗟叹之诗", "若水", "雾切之回光");

    filter(list, weapon -> weapon.contains("之")).stream().forEach(System.out::println);
}

public static <T> List<T> filter(List<T> list, Predicate<T> predicate) {
    List<T> resultList = new ArrayList<>();
    list.stream().forEach(item -> {
        if (predicate.test(item)) {
            resultList.add(item);
        }
    });
    return resultList;
}

Consumer

java.util.function.Consumer

Consumer定义了一个名叫accept的抽象方法,它接受泛型T的对象,没有返回(void)

static List<String> list = Arrays.asList("斫峰之刃", "薙草之稻光", "四风原典", "天空之卷", "狼的末路", "风鹰剑", "阿莫斯之弓", "终末嗟叹之诗", "若水", "雾切之回光");

public static void main(String[] args) {
    forEach(list, System.out::println);
}

public static <T> void forEach(List<T> list, Consumer<T> consumer) {
    list.stream().forEach(item -> {
        consumer.accept(item);
    });
}

Function

java.util.function.Function<T, R>

Function接口定义了一个叫作apply的方法,它接受一个泛型T的对象,并返回一个泛型R的对象。

static List<String> list = Arrays.asList("斫峰之刃", "薙草之稻光", "四风原典", "天空之卷", "狼的末路", "风鹰剑", "阿莫斯之弓", "终末嗟叹之诗", "若水", "雾切之回光");

public static void main(String[] args) {
map(list, String::length).forEach(System.out::println);
}

public static <T, R> List<R> map(List<T> list, Function<T, R> function) {
List<R> resultList = new ArrayList<>();
list.forEach(item -> {
resultList.add(function.apply(item));
});
return resultList;
}

方法引用

构建方法引用

// 指向静态方法的方法引用
Integer::parseInt
    
// 指向实例方法的方法引用
String::length
    
// 指向已有对象实例方法的方法引用
Expert expert = new Expert();
() -> expert::getName
posted @   巡夜  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示