Java Lambda表达式是Java 8中引入的一种新的语法,它可以让你在不创建一个新的函数或者类的情况下,使用函数式编程。它可以帮助你更快地实现功能,并且更加简洁。
Lambda表达式有三个部分:参数列表、箭头和函数体。参数列表是一个由逗号分隔的参数名称列表,它们将传递给函数体。 箭头是一个连字符(-),它将参数列表和函数体连接起来。 函数体是要执行的代码块。
// Lambda 表达式样例 (int x, int y) -> { return x + y; }
Lambda表达式有很多用法,其中最常用的就是使用Lambda来代替匿名内部类。例如:
// 在 Java 8 之前使用匿名内部类来实例化 Runnable 接口 Runnable r = new Runnable(){ @Override public void run(){ System.out.println("Hello World!"); } }; // 在 Java 8 中使用 Lambda 表达式来实例化 Runnable 接口 Runnable r1 = () -> System.out.println("Hello World!");
此外,Lambda表达式还可以用于集合API中的Stream API、Optional API、Date/Time API和I/O API中。例如:
// Stream API 示例 List<String> list = Arrays.asList("a", "b", "c"); list.stream().forEach(s -> System.out.println(s)); // Optional API 示例 Optional<String> optional = Optional.ofNullable("hello"); optional.ifPresent(s -> System.out.println(s)); // Date/Time API 示例 LocalDateTime now = LocalDateTime.now(); now.with(TemporalAdjusters.next(DayOfWeek.SUNDAY)).plusDays(1).plusMonths(1).minusYears(2); // I/O API 示例 Files.list(Paths.get(".")).forEach(path -> System.out.println(path));
总之,Java Lambda表达式是一个非常有用的工具,能够大大提高代码的可读性和易用性。因此,学习并使用Lambda表达式对于Java开发者来说是非常重要的。
lambda表达式可以只在以下四种环境中使用。
lambda表达式可以显示在赋值运算符的右侧。
public class Main { public static void main(String[] argv) { Calculator iCal = (x,y)-> x + y; System.out.println(iCal.calculate(1, 2)); } } @FunctionalInterface interface Calculator{ int calculate(int x, int y); }
上面的代码生成以下结果。
我们可以使用lambda表达式作为方法或构造函数的参数。
public class Main { public static void main(String[] argv) { engine((x,y)-> x / y); } private static void engine(Calculator calculator){ long x = 2, y = 4; long result = calculator.calculate(x,y); System.out.println(result); } } @FunctionalInterface interface Calculator{ long calculate(long x, long y); }
上面的代码生成以下结果。
我们可以在return语句中使用lambda表达式,其目标类型在方法返回类型中声明。
public class Main { public static void main(String[] argv) { System.out.println(create().calculate(2, 2)); } private static Calculator create(){ return (x,y)-> x / y; } } @FunctionalInterface interface Calculator{ long calculate(long x, long y); }
上面的代码生成以下结果。
我们可以使用一个lambda表达式前面加一个cast。在转换中指定的类型是其目标类型。
public class Main { public static void main(String[] argv) { engine((IntCalculator) ((x,y)-> x + y)); } private static void engine(IntCalculator calculator){ int x = 2, y = 4; int result = calculator.calculate(x,y); System.out.println(result); } private static void engine(LongCalculator calculator){ long x = 2, y = 4; long result = calculator.calculate(x,y); System.out.println(result); } } @FunctionalInterface interface IntCalculator{ int calculate(int x, int y); } @FunctionalInterface interface LongCalculator{ long calculate(long x, long y); }
上面的代码生成以下结果。
JavaFX教程 -JavaFX转换JavaFX转换相关类位于javafx.scene.transform包中,并且是Transform类的子类。一个变换是关于如何改变坐...
Java面向对象设计 -Java类实例以下是创建类的实例的一般语法:new Class Constructor; new 运算符后面是对构造函数的调用。 new ...
Java IO教程 - Java输入流抽象基本组件是InputStream类。InputStream | +--FileInputStream| +--ByteArrayInputStream| +--Piped...
Java IO教程 -Java数据输出流DataOutputStream可以将Java基本数据类型值写入输出流。DataOutputStream类包含一个写入数据类型的...
Java IO教程 -Java文件树FileVisitor API可以递归地处理文件树中的所有文件和目录。当我们要对文件树中的所有或某些文件或目录执...