Java Lambda表达式是Java函数式编程的基础。从Java版本8开始,Lambda表达式在很大程度上减少了代码长度和代码复杂性。

什么是Java Lambda表达式?

Java Lambda表达式是行为类似于常规方法的特定代码段。它们被设计为接受一组参数作为输入,并返回值作为输出。与方法不同,Lambda表达式不强制要求特定名称。

现在让我们进一步了解Java Lambda表达式的必要性。

为什么我们需要Lambda表达式?

我们需要Java Lambda表达式的三个主要原因如下:

  • Lambda将代码段转换为参数

  • 它是一种无需实例化类即可创建的方法

  • Lambda可以被视为一个对象

既然我们已经了解了Java Lambda表达式的必要性,让我们继续学习Java Lambda表达式的语法。

Java Lambda表达式的构造

以下是在实时场景中使用Java Lambda表达式时要遵循的语法。

([comma separated argument-list]) -> {body}

为了更好地理解,让我们来看一个示例程序。

package tech.besthub;
import java.lang.FunctionalInterface;
import java.util.Scanner;
@FunctionalInterface
interface MyInterface {
double getPiValue();
}

public class area {
public static void main(String[] args) {
try (Scanner kb = new Scanner(System.in)) {
System.out.println("Enter the value of radius");
int r = kb.nextInt();
MyInterface ref;
ref = () -> 3.1415;
System.out.println("Area of Circle with given radius is = " + r * r * ref.getPiValue());
}
}
}

接下来,我们将研究驱动Java Lambda表达式的重要技术概念。

Lambda表达式的函数接口

函数接口是在Java第8版发布时引入的。功能接口通过其唯一的功能接口注释来表示或标识。函数式接口只用于存储默认方法和静态方法。这些默认方法和静态方法将有实现。此外,函数接口中必须有一个未实现的抽象方法。

为了更好地理解,让我们考虑一下下面的例子。

package tech.besthub;

@FunctionalInterface
interface cube 
{ 
int calculate(int a); 
} 

public class functional 
{ 
public static void main(String args[]) 
{ 
int x = 5; 
cube c = (int a)->a*a*a;  
int result = c.calculate(x); 
System.out.println(result); 
} 
} 

我们现在将进入下一节,在那里我们将通过一些实际示例更好地学习Java Lambda表达式。

Java Lambda表达式的示例。

不带参数的Lambda表达式

//No Parameters
package tech.besthub;

@functional_interface
interface Statement {
public String greet();
}

public class LambdaNP {
public static void main(String[] args) {
Statement s = () -> {
return "Hello World. Welcome to Simplilearn.";
};
System.out.println(s.greet());
}
}

带一个参数的Lambda表达式

//Single Parameters
package tech.besthub;
import java.util.function.*;
public class LambdaOP {
public static void main(String args[]) {
Validator validator = new Validator();
String city = "New York";
boolean isValid = validator.isDataValid(city, (String info) -> {
String regx = "^[a-zA-Z0-9]*$";
return info.matches(regx);
});
System.out.println(" The value returned from lambda is: " + isValid);
}

private static class Validator {
public boolean isDataValid(String data, Predicate<String> predicate) {
return predicate.test(data);
}
}
}

具有多个参数的Lambda表达式

//Multiple Parameters
package tech.besthub;
@functional_interface
interface Product {
float Mul(float x, float y);
}

public class LambdaMP {
public static void main(String[] args) {
Product Mul1 = (x, y) -> (x * y);
System.out.println(Mul1.Mul(2, 5));
Product Mul2 = (float x, float y) -> (x * y);
System.out.println(Mul2.Mul(100, 200));
}
}

Java Lambda表达式与Java中的正则方法

Lambda表达式和规则方法之间的主要区别如下所述。

Lambda表达式

方法

Lambda表达式不需要命名

方法需要声明方法名称

语法: ([comma separated argument-list]) -> {body}

语法: <classname> :: <methodname>

Lambda表达式不能包含参数

方法不能同时包含参数

Lambda表达式不需要返回类型

方法的返回类型是必需的

Lambda表达式本身就是完整的代码段

方法体只是程序的另一个代码段

既然区别已经很明显了,下一个重要的步骤就是学习实现Java Lambda表达式所要遵循的最佳实践。

使用Java Lambda表达式的最佳实践

以下是实时实现Java Lambda表达式需要遵循的最佳实践。

更喜欢使用标准功能接口

功能接口属于Java.util。函数包。它们具有在Java中使用Lambda表达式所需的所有功能。这将对开发人员实时提供帮助。

养成使用@FunctionalInterface 接口的习惯。

特殊的@FunctionalInterface注释仅专用于函数接口,并提供了在复杂代码中识别函数接口的方便性,并避免了其他接口代码段的歧义。

避免在函数接口中过度使用默认方法

仅仅因为它接受就将默认方法过度使用到功能接口中将是一个坏主意。实际上,在功能接口中添加太多不必要的默认方法将是一个错误的体系结构决策。

避免使用函数接口作为参数的重载方法

使用不同名称的方法是避免它们之间冲突的有效解决方案。

结论

Java Lambda表达式在实时软件开发中很有用。现在您已经很好地理解了Java中的API,下一步是学习Java中的序列化和Java中的枚举。