本文共 3328 字,大约阅读时间需要 11 分钟。
什么是lambda表达式?
Lambda表达式是Java8引入的一种匿名函数表达式,直接对应于数学中的λ演算。它允许在不声明函数名称的情况下,定义匿名函数,适用于函数式编程。lambda表达式用来干什么的?
Lambda表达式用于替代传统的匿名内部类,简化代码结构,提高代码的可读性和执行效率。在集合操作中,lambda表达式可以用于过滤、映射、排序等操作,极大地提升了程序的简洁性。lambda表达式的优缺点?
lambda表达式的使用场景?
lambda只是一个语法糖吗?
Lambda表达式并不是简单的语法糖,而是Java8为函数式编程引入的一种新的编程范式。它允许开发者以更高效和简洁的方式定义函数,同时在底层生成特定的机器码,使得代码执行效率更高。Stream是Java8中的一个核心概念,它与传统的InputStream有本质的区别。Stream是一种对集合操作的增强版本,专注于对集合元素进行高效的聚合操作(aggregate operation)。Stream的核心特点包括:
聚合操作是Stream中最核心的概念之一。它包括对元素集合进行过滤、映射、排序、汇总等操作。例如:
filter:过滤满足条件的元素。map:对元素进行变换。sort:对元素进行排序。reduce:对元素进行归约操作,生成最终结果。Lambda表达式的语法简洁,形式为:
(parameters) -> expression 或 (parameters) -> { statements; } Stream可以看作是对集合的一种增强版本。它的主要特点包括:
传统的Runnable代码:
public class RunableTest { public static void runSomeThing() { Runnable runnable = new Runnable() { @Override public void run() { System.out.println("I am running"); } }; new Thread(runnable).start(); } public static void runSomeThingByLambda() { new Thread(() -> System.out.println("I am running")).start(); }} 传统的Comparator代码:
public class SortList { private static List list = Arrays.asList("my","name","is","uber","and","uc"); public static void oldSort() { Collections.sort(list, new Comparator () { @Override public int compare(String a, String b) { if (a.charAt(1) <= b.charAt(1)) { return 1; } else { return -1; } } }); } public static void newSort() { Collections.sort(list, (a, b) -> a.charAt(1) < b.charAt(1) ? 1 : -1); }} 函数式接口是lambda表达式的核心应用场景。
Comparator, ActionListener, Runnable等。lambda表达式的语法形式为:
(parameters) -> expression 或 (parameters) -> { statements; } 方法引用是lambda表达式的一种常见形式。
ClassName::methodNameinstanceReference::methodNamesuper::methodNameClass::newlambda表达式的类型由上下文决定,编译器会自动推导参数类型,减少了手动指定类型的需求。
在Java SE 8中,lambda表达式允许对局部变量进行捕获,但要求这些变量必须是有效只读的(Effectively final)。
方法引用允许直接调用类、实例或超类的方法,简化了代码逻辑。
SAM(Specific Abstract Method)接口是Java8为lambda表达式设计的特殊接口,用于定义函数式操作。
lambda表达式并不是简单的语法糖。它是Java8为函数式编程引入的一种新编程范式,允许开发者以更高效和简洁的方式定义函数,同时在底层生成特定的机器码。
转载地址:http://nxczz.baihongyu.com/