導航:首頁 > 編程語言 > 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

友情鏈接