导航:首页 > 编程语言 > java兰姆达表达式

java兰姆达表达式

发布时间:2023-08-06 10:17:38

『壹』 lambda表达式来自哪里

Lambda表达式(Lambda Expressions)2009-03-06 16:33Lambda 表达式(拉姆达表达式) 和 匿名方法 其实是一件事情。唯一的不同是:他们语法表现形式不同。Lambda 表达式是在语法方面的更进一步的进化。在本质上,他们是一件事情。他们的作用都是:产生方法。即:内联方法。

引用自 C#首席架构师Anders Hejlsberg 的原话:

http://www.ondotnet.com/pub/a/dotnet/2005/10/31/interview-with-anders-hejlsberg-part-2.html?page=2

lambda expressions and anonymous methods are really just two words for the same thing. The only thing that differs is, "What does the syntax look like?" And the lambda expressions are a further evolution of the syntax.But underneath, they do the same thing. They generate methods. You know, they're in-line methods.

所以:我们要了解 Lambda 表达式 就应该同时也了解 匿名方法。下面先看一个简单的代码例子,分别用匿名方法和Lambda 表达式来实现对数组的搜索:

使用 .net 2.0 的匿名方法来搜索字符串数组中包含 a 的字符串数组

static void Main(string[] args)
{
string[] list = new string[] { "abc", "12", "java" };
string[] ll = Array.FindAll(list,
delegate(string s)
{
return s.IndexOf("a") >= 0;
}
);
foreach (string var in ll)
{
Console.WriteLine(var);
}
Console.ReadLine();
}

使用 .net 3.5 的Lambda表达式来搜索字符串数组中包含 a 的字符串数组

static void Main(string[] args)
{
string[] list = new string[] { "abc", "12", "java" };

string[] ll = Array.FindAll(list, s => (s.IndexOf("a") >= 0));
foreach (string var in ll)
{
Console.WriteLine(var);
}
Console.ReadLine();
}

从上述两个例子我们可以看出:

从代码书写角度,代码可读性角度来说:Lambda表达式 比匿名方法更简单了。

而 Lambda表达式 和 匿名方法都是干的同一件事情,让我们少写一个函数定义。函数的调用和函数的实现在一起完成了。

Lambda表达式的书写格式如下:

(参数列表) => 表达式或者语句块

其中:

参数个数:可以有多个参数,一个参数,或者无参数。

参数类型:可以隐式或者显式定义。

表达式或者语句块:这部分就是我们平常写函数的实现部分(函数体)。

一些Lambda表达式的书写范例:

有两个参数的 Lambda表达式例子:

注:别看比较复杂,LINQ中实际把 下述代码中的 delegate ,DoSomeThing 替你做了,所以你写代码的时候只需要写

var t = DoSomeThing<int>(7, 8, (x, y) => x * y); 这么一行。

public delegate T HongJunGuoTest01<T>(T t1, T t2);
class Program
{
private static T DoSomeThing<T>(T t1,T t2,HongJunGuoTest01<T> match)
{
return match(t1, t2);
}

static void Main(string[] args)
{
var t = DoSomeThing<int>(7, 8, (x, y) => x * y);
Console.WriteLine(t);
Console.ReadLine();
}
}

下面这些写法也是对的(你只需要修改Main函数中的代码,其他地方不需要动):

var t = DoSomeThing<int>(7, 8, (int x, int y) => x * y);

var t = DoSomeThing<string>("7", "8", ( x, y) => x + y);

或者我们写一个更复杂的: => 右边是一段语句块。

var t = DoSomeThing<int>(7, 8, (x, y) => { if (x < 5) { return (x + 8) * y; } else { return y; } });

最前面的例子是一个参数的例子,我们就不举一个参数的例子了,下面举一个没有参数的例子:

public delegate void HongJunGuoTest02();
class Program
{
private static void DoSomeThing(HongJunGuoTest02 match)
{
match();
}

static void Main(string[] args)
{
DoSomeThing(() => Console.WriteLine("jajaja"));
Console.ReadLine();
}
}

函数式编程

匿名方法,Lambda表达式 都是函数式编程思想下的产物,

函数式编程如果从概念角度来理解,比较晦涩,简单来说:

函数式编程的主要特点就是没有变量,所有算法都用递归函数来书写。整个程序除了定义函数就是调用函数,没有其他类型的语句。

这种编程思想的好处和特点,

Lambda 表达式(拉姆达表达式) 和 匿名方法 其实是一件事情。唯一的不同是:他们语法表现形式不同。Lambda 表达式是在语法方面的更进一步的进化。在本质上,他们是一件事情。他们的作用都是:产生方法。即:内联方法。

引用自 C#首席架构师Anders Hejlsberg 的原话:

http://www.ondotnet.com/pub/a/dotnet/2005/10/31/interview-with-anders-hejlsberg-part-2.html?page=2

lambda expressions and anonymous methods are really just two words for the same thing. The only thing that differs is, "What does the syntax look like?" And the lambda expressions are a further evolution of the syntax.But underneath, they do the same thing. They generate methods. You know, they're in-line methods.

所以:我们要了解 Lambda 表达式 就应该同时也了解 匿名方法。下面先看一个简单的代码例子,分别用匿名方法和Lambda 表达式来实现对数组的搜索:

使用 .net 2.0 的匿名方法来搜索字符串数组中包含 a 的字符串数组

static void Main(string[] args)
{
string[] list = new string[] { "abc", "12", "java" };
string[] ll = Array.FindAll(list,
delegate(string s)
{
return s.IndexOf("a") >= 0;
}
);
foreach (string var in ll)
{
Console.WriteLine(var);
}
Console.ReadLine();
}

使用 .net 3.5 的Lambda表达式来搜索字符串数组中包含 a 的字符串数组

static void Main(string[] args)
{
string[] list = new string[] { "abc", "12", "java" };

string[] ll = Array.FindAll(list, s => (s.IndexOf("a") >= 0));
foreach (string var in ll)
{
Console.WriteLine(var);
}
Console.ReadLine();
}

从上述两个例子我们可以看出:

从代码书写角度,代码可读性角度来说:Lambda表达式 比匿名方法更简单了。

而 Lambda表达式 和 匿名方法都是干的同一件事情,让我们少写一个函数定义。函数的调用和函数的实现在一起完成了。

Lambda表达式的书写格式如下:

(参数列表) => 表达式或者语句块

其中:

参数个数:可以有多个参数,一个参数,或者无参数。

参数类型:可以隐式或者显式定义。

表达式或者语句块:这部分就是我们平常写函数的实现部分(函数体)。

一些Lambda表达式的书写范例:

有两个参数的 Lambda表达式例子:

注:别看比较复杂,LINQ中实际把 下述代码中的 delegate ,DoSomeThing 替你做了,所以你写代码的时候只需要写

var t = DoSomeThing<int>(7, 8, (x, y) => x * y); 这么一行。

public delegate T HongJunGuoTest01<T>(T t1, T t2);
class Program
{
private static T DoSomeThing<T>(T t1,T t2,HongJunGuoTest01<T> match)
{
return match(t1, t2);
}

static void Main(string[] args)
{
var t = DoSomeThing<int>(7, 8, (x, y) => x * y);
Console.WriteLine(t);
Console.ReadLine();
}
}

下面这些写法也是对的(你只需要修改Main函数中的代码,其他地方不需要动):

var t = DoSomeThing<int>(7, 8, (int x, int y) => x * y);

var t = DoSomeThing<string>("7", "8", ( x, y) => x + y);

或者我们写一个更复杂的: => 右边是一段语句块。

var t = DoSomeThing<int>(7, 8, (x, y) => { if (x < 5) { return (x + 8) * y; } else { return y; } });

最前面的例子是一个参数的例子,我们就不举一个参数的例子了,下面举一个没有参数的例子:

public delegate void HongJunGuoTest02();
class Program
{
private static void DoSomeThing(HongJunGuoTest02 match)
{
match();
}

static void Main(string[] args)
{
DoSomeThing(() => Console.WriteLine("jajaja"));
Console.ReadLine();
}
}

函数式编程

匿名方法,Lambda表达式 都是函数式编程思想下的产物,

函数式编程如果从概念角度来理解,比较晦涩,简单来说:

函数式编程的主要特点就是没有变量,所有算法都用递归函数来书写。整个程序除了定义函数就是调用函数,没有其他类型的语句。

这种编程思想的好处和特点,

『贰』 java迭代器可以遍历map吗

刚才回顾了一下复:(JDK1.7以前制,含1.7)
可以迭代,但是不能直接迭代,Map集合没有迭代器,也没有实现什么迭代器接口!
这个只是迭代方式1:
迭代器是针对单列集合:Collection使用的,既:List与Set旗下小弟使用!
Map集合可以返回一个Set集合,里面都是键Key
既然可以返回一个Set集合,那么就可以拿迭代器对这个Set集合进行迭代,迭代Set集合同时
间接就可以获取Map的value项,达到迭代Map的目的!
还有第二种方式也可以迭代:
Map集合也可以返回一个Map.Entry(映射项)对象,这个玩意也被封装在一个Set集合中
这个玩意有自己的内部方法,也可以直接获取键值,以达到迭代目的!
提示一下:(JDK1.8开始增加了Map.froEach,Lambda拉姆达表达式);

阅读全文

与java兰姆达表达式相关的资料

热点内容
ps3文件分割视频 浏览:280
微信图片一键转发软件 浏览:331
如何判断s200plc编程电缆 浏览:691
太原编程培训班哪个好 浏览:171
树叶吹奏教程 浏览:6
社交app带来了哪些社会问题 浏览:394
如何安装爱宝8800数据采集器 浏览:712
文件保存了怎么找不到了 浏览:476
彩票网站怎么辨真假 浏览:840
pr找不到该文件 浏览:963
java移除panel 浏览:354
jsp填充jsp 浏览:166
海关外贸大数据在哪里查 浏览:381
思特奇java笔试题 浏览:121
葫芦侠在手机中的文件名 浏览:813
plc编程应该怎么收钱 浏览:584
c语言中源文件由什么组成 浏览:890
linuxhttpdphp配置文件 浏览:607
拆单数据要怎么保存 浏览:17
mac电脑怎样压缩文件到100m 浏览:645

友情链接