導航:首頁 > 編程語言 > 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蘭姆達表達式相關的資料

熱點內容
猥瑣貓表情教程 瀏覽:599
android音頻文件格式 瀏覽:458
漫畫臉app哪裡可以下載 瀏覽:959
購買歡樂升級歡樂豆 瀏覽:282
學習智能機器人用什麼編程最好 瀏覽:655
蘋果手機如何管控app 瀏覽:633
mn文件夾 瀏覽:590
安卓平板通用刷機包下載 瀏覽:751
安卓獲取內部存儲路徑 瀏覽:880
寫代碼兩台顯示器 瀏覽:327
unitypackage壓縮文件 瀏覽:493
奕心安卓 瀏覽:563
使用土地的有關證明文件包含哪些 瀏覽:493
數據標注哪裡可以接 瀏覽:482
在家自學編程下什麼學 瀏覽:705
最近很火的app軟體是什麼軟體 瀏覽:862
ai文字工具 瀏覽:157
蘭博玩游戲路徑怎麼選擇正確文件 瀏覽:972
淘寶直通車恢復老版本 瀏覽:510
播放草莓的圖片我都文件 瀏覽:55

友情鏈接