Java lambda表达式是Java 8中引入的一种新的语法,它可以让你更加简洁地表达函数式编程。它可以帮助你更快地实现复杂的逻辑,并且可以使代码更加易读。
Lambda表达式有两个部分:参数列表和函数体。参数列表是一个由逗号分隔的参数列表,它由一个或多个形式参数组成。函数体是一个单独的语句或代码块,它包含要执行的操作。
Lambda表达式有很多优势,其中最重要的是它能够帮助你更快地实现复杂的逻辑。例如,如果你想要对一个集合中的所有元素进行过滤,你可以使用lambda表达式来快速实现这一目标。此外,lambda表达式也能帮助你避免写大量重复性代码,因此能够使代码更加易读和易于理解。
list.stream() .filter(x -> x.getAge() > 18) .forEach(x -> System.out.println(x));
lambda表达式是一个未命名的方法,代替一个委托实例。
给定以下委托类型:
delegate int Converter (int i);
我们可以如下分配和调用lambda表达式x => x * x:
Converter sqr = x => x * x; Console.WriteLine (sqr(3)); // 9
lambda表达式具有以下形式:
(parameters) => expression
We can omit the parentheses if and only if there is exactly one parameter of an inferable type.
在我们的示例中,有一个参数, x
,表达式为 x * x
:
x => x * x;
lambda表达式的每个参数都对应一个委托参数,表达式的类型对应于委托的返回类型。
在上面的代码中, x
对应于参数 i
,表达式 x * x
对应于返回类型 int
,因此它与 Converter
委托兼容,如下所示:
delegate int Converter (int i);
lambda表达式的代码可以是语句块而不是表达式。
x => { return x * x; };
Lambda表达式最常用于Func和Action委托。
我们可以重写上面的代码如下:
Func<int,int> sqr = x => x * x;
下面是一个接受两个参数的表达式示例:
Func<string,string,int> totalLength = (s1, s2) => s1.Length + s2.Length; int total = totalLength ("a", "the");
lambda表达式可以引用定义它的方法的局部变量和参数。
例如:
static void Main(){ int factor = 2; Func<int, int> multiplier = n => n * factor; Console.WriteLine (multiplier (3)); // 6 }
由lambda表达式引用的外部变量称为捕获变量。
捕获变量的lambda表达式称为闭包。
捕获的变量在实际调用委托时求值,而不是在捕获变量时求值:
int factor = 2; Func<int, int> multiplier = n => n * factor; factor = 3; Console.WriteLine (multiplier (3)); // 9
Lambda表达式可以更新捕获的变量:
int outerVariable = 0;
Func<int> myLambda = () => outerVariable++;
Console.WriteLine (myLambda()); // 0
Console.WriteLine (myLambda()); // 1
Console.WriteLine (outerVariable); // 2
要编写匿名方法,请包括delegate关键字,随后可以包含参数声明,然后是方法体。
例如,给这个代理:
delegate int Converter (int i);
我们可以写和调用匿名方法如下:
Converter sqr = delegate (int x) {return x * x;}; Console.WriteLine (sqr(3)); // 9
第一行在语义上等同于以下lambda表达式:
Converter sqr = (int x) => {return x * x;};
或者简单为:
Converter sqr = x => x * x;
匿名方法以与lambda表达式相同的方式捕获外部变量。
C# 异常处理异常是在程序执行期间出现的问题。C# 中的异常是对程序运行时出现的特殊情况的一种响应,比如尝试除以零。 异常提供...
C#是由微软(Microsoft)开发的,由 ECMA(欧洲计算机厂家协会) 和 ISO 核准认可的一个现代的、通用的、面向对象的编程语言。C#...
在 C# 中,变量分为以下几种类型:值类型(Value types)引用类型(Reference types)指针类型(Pointer types) 值类型(Value ...