为什么辽宁省城乡建设厅网站打不开,今天中国新闻,免费vip网站推广,石家庄市环保局网站建设项目备案系统目录 【日积月累】Java Lambda 表达式 1.前言2.语法3.应用场景3.1简化匿名内部类的编写3.1简化匿名内部类的编写3.2简化集合类中的操作3.3实现函数式接口3.4简化多个方法的调用3.5简化异步编程 4.总结5.参考 文章所属专区 日积月累 1.前言
Lambda表达式是一个匿名函数#…
目录 【日积月累】Java Lambda 表达式 1.前言2.语法3.应用场景3.1简化匿名内部类的编写3.1简化匿名内部类的编写3.2简化集合类中的操作3.3实现函数式接口3.4简化多个方法的调用3.5简化异步编程 4.总结5.参考 文章所属专区 日积月累 1.前言
Lambda表达式是一个匿名函数也称闭包允许把函数作为一个方法的参数使用它设计的代码会更加简洁。当开发者在编写Lambda表达式时也会随之被编译成一个函数式接口。
2.语法
Lambda表达式是用箭头-定义的后面跟着一个或多个参数列表和方法体。
(parameters) - expression或
(parameters) -{ statements; }parameters是一个或多个参数列表它们是用圆括号括起来的。参数列表是用逗号分隔的参数名称和类型的列表。方法体是在箭头后面的花括号内定义的代码块。 示例
int x 10;
int y 20;
int sum (a, b) - a b;
System.out.println(sum(x, y)); // 输出303.应用场景
3.1简化匿名内部类的编写
未使用前
// 未使用Lambda表达式简化匿名内部类
public class MyClass {public static void main(String[] args) {new Thread() {Overridepublic void run() {System.out.println(Hello, world!);}}.start();}
}使用之后
在这里插入代码片3.1简化匿名内部类的编写
未使用前
import java.util.ArrayList;
import java.util.List;public class AnonymousInnerClassExample {public static void main(String[] args) {ListInteger list new ArrayList();list.add(1);list.add(2);list.add(3);for (Integer i : list) {System.out.println(i);}}
}使用之后
import java.util.ArrayList;
import java.util.List;public class AnonymousInnerClassExample {public static void main(String[] args) {ListInteger list new ArrayList();list.add(1);list.add(2);list.add(3);list.forEach(System.out::println);}
}Lambda表达式中的System.out::println是一个静态方法引用它表示println()方法的调用。在Lambda表达式中它被用于打印每个元素。
3.2简化集合类中的操作
public class AnonymousInnerClassExample {public static void main(String[] args) {ListInteger list new ArrayList();list.add(1);list.add(2);list.add(3);list.forEach(System.out::println);}
}3.3实现函数式接口
只包含一个抽象方法的接口就称为函数式接口。 我们可以在任意函数式接口上使用FunctionalInterface注解这样做可以用于检测它是否是一个函数式接口同时javadoc也会包含一条声明说明这个接口是一个函数式接口。 定义函数式接口
FunctionalInterface
public interface MyFuncInterfT {public T getValue(String origin);
}使用函数式接口作为方法参数 public String toLowerString(MyFuncInterfString mf,String origin){return mf.getValue(origin);}使用Lambda表达式实现的接口作为参数传递 public void test(){String result toLowerString((str)-{return str.toLowerCase();},ABC)System.out.println(result);//结果abc}3.4简化多个方法的调用
使用之后
public static void main(String[] args) {String result filter(list - list.contains(apple), banana, orange);System.out.println(result); // output: [apple]
}
public static T ListT filter(PredicateT predicate, T... values) {return Arrays.stream(values).filter(predicate).collect(Collectors.toList());
}3.5简化异步编程
使用之后
// 使用Lambda表达式简化匿名内部类
public class MyClass {public static void main(String[] args) {Runnable runnable new Runnable() {Overridepublic void run() {System.out.println(Hello, world!);}};runnable.run();}
}// 使用Lambda表达式简化集合类中的操作
ListInteger list Arrays.asList(1, 2, 3);
list.forEach(i - System.out.println(i * 2));// 使用Lambda表达式实现函数式接口
SupplierString greetingSupplier () - Hello, ;
String greeting greetingSupplier.get();// 使用Lambda表达式简化多个方法的调用
public void process(ListString strings) {strings.forEach(string - process(string));
}// 使用Lambda表达式简化异步编程
ExecutorService executorService Executors.newFixedThreadPool(3);
FutureString future1 executorService.submit(() - {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}return Task 1 completed;
});
FutureString future2 executorService.submit(() - {try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}return Task 2 completed;
});String result1 future1.get();
String result2 future2.get();
System.out.println(result1 result2);4.总结
使用Lambda表达式可能会使代码更简洁和易读但也可能会增加代码的复杂性特别是在需要处理大量数据时。因此在使用Lambda表达式和匿名内部类时我们应该仔细考虑是否有更好的方法来实现我们的需求。
5.参考
Java Lambda 表达式 Lambda表达式超详细总结 lambda表达式详解 给个三连吧 谢谢谢谢谢谢了