拉姆达表达式学习(1)

函数式编程之根-拉姆达运算/演算(λ-calculus) 学习函数式编程的大图(big map)/鸟瞰图 阅读详情

转:http://www.cnblogs.com/shenfengok/archive/2011/10/10/2205363.html

我曾经遇到一个项目,项目里面需要经常对一系列的同类型集合进行操作,如对集合进行增加元素,删除集合的指定索引的元素等等.
  我们可以使用ArrayList来进行.如

 

1 ArrayList stringList=new ArrayList();
2 stringList.Add("大家好");
3 stringList.Add("你们好");
4 stringList.Add("同志们好");
5 string str1=(string)stringList[0];//取出一个元素后,需要转换一次类型才可以

 

 或者是

 

1 ArrayList intList=new ArrayList();
2 intList.Add(6);
3 intList.Add(8);
4 intList.Add(66);
5 int int1=(int)intList[0];//取出一个元素后,需要转换一次类型才可以

 

  但是ArrayList中的每个元素的类型都是Object(stringList[0]的类型是Object]),这意味着我们每一次的操作,其实都进行了隐式的类型转换,加入资料是把普通类型转换成Object类型,取出资料是把Object类型转换成普通类型.
  于是我在想象,如果有一种数组类型,在定义的时候,可以给出每个元素具体的类型,并且在赋值或者取值的时候,就是完全按照这个类型进行操作该多好.
  在.net2.0里面,我找到了List这个类型.List是一个泛型,我们看看List的使用

 

代码

1 List<string> stringList = new List<string>();
2 stringList.Add("大家好");
3 string str1 = stringList[0];//直接赋值成功!因为取出来的就是string对象
4 //或者是
5 List<int> intList = new List<int>();
6 intList.Add(8);
7 int int1 = intList[0];//直接赋值成功!因为取出来的就是int对象

 

 

  大家可以看出,List在实例化的时候就需要定义一个类型,也就是尖括号中间的东西,在增加元素,或者获取元素的时候,操作的都是最开始定义的那种类型.List便是传说中的泛型类型.
  泛型可以用在方法上,也可以用在类上.如果看到某个方法或者类后面带有尖括号的,那么这个肯定就是泛型了.

  现在,我找到了能够有效的存储我要操作的集合的类型,那么我们要解决一些操作了.
  我需要对集合进行一个连接输出(把所有的元素连接在一起,每个元素之间使用<BR>来分割),还需要知道所有元素的总长度.显然,光一个List类型是解决不了问题的.于是我自己定义了一个自己的泛型类型

 

 

代码

 1 /// <summary>
 2     /// 这是一个泛型类,类名后面接着一个尖括号里面的那个t,是我们自己定义的,如果你高兴,你可以定义w,y,z,WC都没有问题!
 3     /// 这个T表示说我们在实例化类的时候,需要告诉类,我们是用哪一种类型来进行操作.
 4     /// </summary>
 5     /// <typeparam name="T"></typeparam>
 6     public class MyList<T>
 7     {
 8         public List<T> _List { get; set; }
 9         public MyList()
10         {
11             this._List = new List<T>();
12         }
13         /// <summary>
14         /// 用来连接所有元素用
15         /// </summary>
16         /// <returns>连接后的字符串</returns>
17         public string JoinOut()
18         {
19             StringBuilder stbTemp = new StringBuilder();
20             foreach (var item in _List)
21             {
22                 stbTemp.Append(item);
23                 stbTemp.Append("<BR>");
24             }
25             return stbTemp.ToString();
26         }
27         /// <summary>
28         /// 所有元素的长度
29         /// </summary>
30         /// <returns>元素的整体长度</returns>
31         public int AllLen()
32         {
33             StringBuilder stbTemp = new StringBuilder();
34             foreach (var item in _List)
35             {
36                 stbTemp.Append(item);
37             }
38             return stbTemp.Length;
39         }
40 
41     }

 

但是如果我在求元素长度的时候,要求如果是stirng则返回所有元素的长度,而是int的时候,则返回所有元素的和.于是我重写了AllLen方法

 

代码

 1     public int AllLen()
 2         {
 3             //StringBuilder stbTemp = new StringBuilder();
 4             //foreach (var item in _List)
 5             //{
 6             //    stbTemp.Append(item);
 7             //}
 8             //return stbTemp.Length;
 9 
10             StringBuilder stbTemp = new StringBuilder();
11             var type = typeof(T);
12             if (type == typeof(string))
13             {
14                 foreach (var item in _List)
15                 {
16                     stbTemp.Append(item);
17                     stbTemp.Append("<BR>");
18                 }
19                 return stbTemp.Length;
20             }
21             if (type == typeof(int))
22             {
23                 int intSum = 0;
24                 foreach (var item in _List)
25                 {
26                     intSum += int.Parse(item.ToString());
27                 }
28                 return stbTemp.Length;
29             }
30 
31             /*  这里可能还需要根据不同的类型进行不同的处理
32              */
33             return 0;
34         }

 

 我在整个项目中,会负责编写公用类库.我不知道其他前台编码人员需要什么样子的操作.并且前台编码人员会各处一些稀奇古怪的需求我,要我实现,如他想接受一系列的bool类型,然后判断所有结果为True的数量,或者传入一系列的日期,判断所有星期一的日期有多少个...等等.我比较懒,并且我非常不愿意去修改我已经写好的类库.所以我又对Allen进行了一次修改.

 

代码

 1     //写一个委托,谁愿意做什么操作就自己写去,哥不管了!
 2     public delegate int delegateAllLen<T>(List<T> list);
 3         //写一个委托,谁愿意做什么操作就自己写去,哥不管了!
 4         public delegateAllLen<T> FuncAllLen { get; set; }
 5         public int AllLen()
 6         {
 7             if (FuncAllLen != null)
 8             {
 9                 return FuncAllLen(_List);
10             }
11             return 0;
12         }

我告诉前台编码人员,你们想做什么就先去实现委托FuncAllLen.然后调用AllLen方法.

 

代码

 1     /// <summary>
 2         /// 委托的实现
 3         /// </summary>
 4         /// <param name="bln"></param>
 5         /// <returns></returns>
 6         public int Temp(List<bool> bln)
 7         {
 8             int i = 0;
 9             foreach (var item in bln)
10             {
11                 if (item) i++;
12             }
13             return i;
14         }
15 
16         public void Main()
17         {
18             var list = new MyList<bool>();
19 
20             list._List.Add(true);
21             list._List.Add(false);
22             list._List.Add(true);
23             ///实现委托
24             list.FuncAllLen += Temp;
25             MessageBox.Show(list.AllLen().ToString());
26         }
27 
28 

现在我就轻松多了,可以去睡大觉了!所有的具体操作,前台编码人员自己去实现FuncAllLen 这个委托去!我全部不管了!哈哈哈!
不过这样写可能还是有有点难以理解.一会定义一个delegate int delegateAllLen<T>(List<T> list);一会又是delegateAllLen<T> FuncAllLen { get; set; },都不知道那个是那个....
于是我采用C#3.5中委托的写法

 

代码

1        /*
2         public delegate int delegateAllLen<T>(List<T> list);
3         public delegateAllLen<T> FuncAllLen { get; set; }
4         以上这两句,可以简写成下面的一句!
5          */
6         public Func<List<T>, int> FuncAllLen { get; set; }

调用的方法和以前一样,可是编码人员告诉我:这样你方便了,我们可就麻烦了,每次都要记得在使用AllLen方法的时候,都要先把委托实现了.特别是新来的人,总是记不住.
正好,最近我在学习Linq,c#3.5中推出了拉姆达表达式,可以让委托更简单的实现!于是我最后一次重写AllLen方法

 

代码

 1     //我要使用最先进,最流行的拉姆达表达式!所以下面的这行委托我不需要了!哈哈哈哈
 2     //public Func<List<T>, int> FuncAllLen { get; set; }
 3 
 4         //其实我把上面的委托定义放到函数里面当参数了....
 5         public int AllLen(Func<List<T>, int> FuncAllLen)
 6         {
 7             if (FuncAllLen != null)
 8             {
 9                 return FuncAllLen(_List);
10             }
11             return 0;
12         }

 

最后我们看看调用的方法

代码

 1 public void Main()
 2         {
 3             var list = new MyList<bool>();
 4 
 5             list._List.Add(true);
 6             list._List.Add(false);
 7             list._List.Add(true);
 8         //传说中的拉姆达表达式出现了!!!!!!
 9             int intRef = list.AllLen(
10                 PList =>
11                 {
12                     int i = 0;
13                     foreach (var item in PList)
14                     {
15                         if (item) i++;
16                     }
17                     return i;
18                 });
19         }

 

 

具体我们来看看拉姆达表达式的用法!
拉姆达表达式由三个部分组成,=>是拉姆达中固定的符号,必须出现!
=>
左边的表达式是一个参数列表,是一组没有类型的字符(字符怎么写随意!只要符合命名规范就好了),每个字符表示一个参数,每个参数之间使用逗号分割.
如:
 
如果有三个参数,则表达式为(A,B,C),或者是(P1,P2,P3),
=>
右边的是具体要实现的代码段,代码段里面可以使用参数列表中的参数进行各种运算.
如:
{return P1+P2+p3;}
合起来就是 (P1,P2,P3)=>{return P1+P2+P3;}
如果参数只有一个,那么省去小括号:P1=>{return P1+10;}
如果具体的实现代码只有一句返回语句,则可以简写成 P1=>P1+10;

一定要注意,拉姆达表达式只是一个委托的定义而已,当程序运行到拉姆达表达式的时候,拉姆达表达式里面的语句是不会被立刻执行的,很多人在初学拉姆达或者委托的时候都会犯这种错误.
如:

 

代码

 1      public void Main()
 2         {
 3              var intSumTemp = Sum((tempInt) => { return tempInt + 1; });
 4         }
 5 
 6         public int Sum(Func<int, int> func)
 7         {
 8         var int1=5;
 9         int1+=5;
10             var intTemp = func(int1);
11             return intTemp * intTemp;
12         }

 

 

上面的intSumTemp的结果是121.
运行的顺序是:首先调用Sum方法而不会去执行拉姆达表达式.
然后得到int1=10的结果(5+5),
接着需要运行func了,并且知道func的参数值是int1,即10.
那么func是通过拉姆达表达式定义的,所以这个时候,我们把10传入拉姆大表达式中,进行运算得到11(10+1)
方法最后是一个平方操作.结果为121(11*11)

知道拉姆达的写法,和使用的方法,那么我们在什么情况下可以使用拉姆达表达式能?
当我们在使用一个方法,方法的参数是Func,或Action,那么就可以使用拉姆达表达式了!
我们拿linq里面的方法举例!
public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);
可写成  var temp=_List.Where(P=>{return true;});
public static int Sum<TSource>(this IEnumerable<TSource> source, Func<TSource, int> selector);
可写成  var temp=_List.Sum(P=>P.count);

拉姆达表达式学习(2)

在.net3.5里面,委托的定义和实现被大大的简化了!使用关键字Func或Action就可以定义一个委托,使用拉姆达表达式就可以实现一个具体的委托.
Func
关键字是用来定义一个有返回值的委托,它一共有五个重载,我们介绍其中的三个
1 public delegate TResult Func<TResult>();
 
这表示一个没有参数,只有一个返回值的委托,返回值的类型就是TResult(泛型)

 

代码

 1  public class test
 2     {
 3         /// <summary>
 4         /// 定义一个委托
 5         /// </summary>
 6         public Func<string> _GetName;
 7         /// <summary>
 8         /// 一个普通的没有参数,有返回值的方法
 9         /// </summary>
10         /// <returns></returns>
11         public string GetName()
12         {
13             return "张三";
14         }
15         public void Main()
16         {
17             //3.5以前的委托的实现,直接赋值
18             _GetName = GetName;
19 
20             //拉姆达表达式的实现方法
21             _GetName = (
22                 ()          //因为这个委托没参数,所以参数列表没有东西
23                     =>      //拉姆达表达式的符号
24                 {           //大括号的代码段表示具体的委托的实现
25                     return "还是张三";
26                 });
27             //拉姆达表达式的简写,如果委托的实现代码段中只有一句return 则可以省略代码段最外面的大括号,和return关键字
28             _GetName = () => "总是张三";
29             //调用
30             string MyName = _GetName();
31         }
32     }

 

2 public delegate TResult Func<T, TResult>(T arg);
 
这表示有且仅有一个参数,并且有返回值的委托.

 

代码

 1  public class test
 2     {
 3         /// <summary>
 4         /// 定义一个委托,有一个参数和一个返回值
 5         /// </summary>
 6         public Func<string, string> _GetName;
 7         /// <summary>
 8         /// 有一个参数的方法
 9         /// </summary>
10         /// <param name="strName">这是一个参数!</param>
11         /// <returns>这是一个返回值</returns>
12         public string GetName(string strName)
13         {
14             return strName;
15         }
16         public void Main()
17         {
18             //3.5以前的委托的实现,直接赋值
19             _GetName = GetName;
20 
21             //拉姆达表达式的实现方法
22             _GetName = (
23                 (S)          //有一个参数!所以参数列表里面有一个东西,这个东西随大家高兴叫个阿猫阿狗都行!只要符合规范
24                     =>      //拉姆达表达式的符号
25                 {           //大括号的代码段表示具体的委托的实现
26                     return "还是" + S;
27                 });
28             //拉姆达表达式的简写,如果委托的实现代码段中只有一句return 则可以省略代码段最外面的大括号,和return关键字
29             _GetName = (abc) => "总是" + abc;
30             //调用
31             string MyName = _GetName("张三");
32         }
33     }

 

3 public delegate TResult Func<T1, T2, TResult>(T1 arg1, T2 arg2);
 
这表示有且仅有两个参数,并且有返回值的委托.

 

代码

 1  public class test
 2     {
 3         /// <summary>
 4         /// 定义一个委托,有一个参数和一个返回值
 5         /// </summary>
 6         public Func<string, int, string> _GetName;
 7         /// <summary>
 8         /// 这是一个有两个参数的方法,方法的参数类型的顺序必须和委托的参数类型顺序一致
 9         /// </summary>
10         /// <param name="strName">第一个是字符类型</param>
11         /// <param name="intAGE">第二个是整形,请不要颠倒类型!</param>
12         /// <returns>返回一个字符串,对应委托的最后一个参数</returns>
13         public string GetName(string strName, int intAGE)
14         {
15             return string.Format("{0}的年龄是{1}岁", strName, intAGE);
16         }
17         public void Main()
18         {
19             //3.5以前的委托的实现,直接赋值
20             _GetName = GetName;
21 
22             //拉姆达表达式的实现方法
23             _GetName = (
24                 (S, W)          //有一个参数!所以参数列表里面有一个东西,这个东西随大家高兴叫个阿猫阿狗都行!只要符合规范
25                     =>      //拉姆达表达式的符号
26                 {           //大括号的代码段表示具体的委托的实现
27                     return string.Format("{0}的年龄是{1}岁", S, W);
28                 });
29             //拉姆达表达式的简写,如果委托的实现代码段中只有一句return 则可以省略代码段最外面的大括号,和return关键字
30             _GetName = (abc, efd) => string.Format("{0}的年龄是{1}岁", abc, efd);
31             //调用
32             string MyName = _GetName("张三", 33);
33         }
34     }

 

Action关键字用来定义一个没有返回值的方法,它有一个非泛型方法,和四个泛型方法,一共五种.Action和func的区别就在于一个没有返回值,一个有返回值!其他的都一样!就好像VB的sub和function一样!
1 public delegate void Action();
没有参数也没有返回值

 

代码

 1 public class test
 2     {
 3         /// <summary>
 4         /// 定义一个委托,没有返回值也没有参数
 5         /// </summary>
 6         public Action _GetName;
 7 
 8         public void GetName()
 9         {
10             System.Windows.Forms.MessageBox.Show("没有参数也没有返回值,我只要自己显示了!");
11         }
12         public void Main()
13         {
14             //3.5以前的委托的实现,直接赋值
15             _GetName = GetName;
16 
17             //拉姆达表达式的实现方法
18             _GetName = (
19                 ()
20                     =>      //拉姆达表达式的符号
21                 {           //大括号的代码段表示具体的委托的实现
22                     System.Windows.Forms.MessageBox.Show("没有参数也没有返回值,我只要自己显示了!");
23                 });
24             //因为action没有返回值,所以下面的简写方式是错误的
25             //_GetName = () => System.Windows.Forms.MessageBox.Show("没有参数也没有返回值,我只要自己显示了!"); 
26             //调用
27             _GetName();
28         }
29     }

2  public delegate void Action<T>(T obj);
有一个参数但没有返回值

 

 

代码

 1 public class test
 2     {
 3         /// <summary>
 4         /// 定义一个委托,没有返回值也没有参数
 5         /// </summary>
 6         public Action<bool> _GetName;
 7 
 8         public void GetName(bool blnShow)
 9         {
10             if (blnShow)
11             {
12                 System.Windows.Forms.MessageBox.Show("要我显示就显示,多没面子");
13             }
14             else
15             {
16                 System.Windows.Forms.MessageBox.Show("不要我显示,我偏要显示");
17             }
18         }
19         public void Main()
20         {
21             //3.5以前的委托的实现,直接赋值
22             _GetName = GetName;
23 
24             //拉姆达表达式的实现方法
25             _GetName = (
26                 (b)
27                     =>      //拉姆达表达式的符号
28                 {           //大括号的代码段表示具体的委托的实现
29                     if (b)
30                     {
31                         System.Windows.Forms.MessageBox.Show("要我显示就显示,多没面子");
32                     }
33                     else
34                     {
35                         System.Windows.Forms.MessageBox.Show("不要我显示,我偏要显示");
36                     }
37                 });
38 
39             _GetName(true);
40         }
41     }

 

 

 


不过通常func和action并不是单独定义,然后使用,而是当作某个方法的参数的类型

 

ARM架构下安装VMware Horizon Client:依赖检查与环境变量配置实战 远程桌面协议在ARM生态下的落地,往往比x86架构面临更多隐性障碍。Horizon Client作为VMware虚拟桌面入口,其运行依赖图形库、证书库、多媒体组件及USB重定向模块,而官方安装包并未自动处理这些ARM环境下的差异化依赖。理解其底层原理后,通过系统化依赖检查、ldd静态验证,以及JAVA_HOME、SSL_CERT、VDP等环境变量的精准配置,可有效解决启动闪退、证书校验失败和连接中断等典型问题。这套方法适用于Apple Silicon、树莓派、飞腾等ARM设备,在Ubuntu等Linux发行 阅读详情

相关推荐

UltraScale+ FPGA中GTY收发器参考时钟的跨Bank共享机制解析

本文深入解析了UltraScale+ FPGA中GTY收发器参考时钟的跨Bank共享机制,详细介绍了时钟布线架构、SLR区域限制及Vivado工程配置要点。通过实际案例和优化建议,帮助工程师解决高速串行通信中的时钟共享问题,提升系统性能。

weixin_29280219的博客 630

拉姆达表达式

拉姆达表达式学习(1)   我曾经遇到一个项目,项目里面需要经常对一系列的同类型集合进行操作,如对集合进行增加元素,删除集合的指定索引的元素等等.  我们可以使用ArrayList来进行.如 1ArrayListstringList=newArrayList();2stringList.Add("大家好");3stringList.Add("你们好");4stringList...

weixin_33894992的博客 365

FPGA驱动OV5640:从SCCB协议到图像数据采集的实战解析

本文详细解析了使用FPGA驱动OV5640摄像头模组的完整流程,从SCCB协议通信、寄存器配置到图像数据采集。重点阐述了SCCB(与I2C类似)协议的实现细节、关键的上电复位时序,以及如何通过状态机解析视频流时序并捕获图像数据,为嵌入式视觉开发提供了实战指南。

weixin_29191761的博客 187

JAVA使用Lambda表达式查找list集合中是否包含某值

JAVA使用Lambda表达式查找list集合中是否包含某值 for (String className : allClassName) { if (!classDetailList.stream().filter(o -> ToolUtil.equals(o.getClassName(), className)).findFirst().isPresent()) { classDetailList.add(new AftersaleStatisticDTO().setClassNa

weixin_43858882的博客 9351

从零开始学版图(二)-----------差分放大电路

从零开始学版图

m0_56112720的博客 8557

zabbix6.0.4拓扑图链路显示流量

1. 背景介绍 网络流量监控是网络管理员必备功课,以前研究cacti的weathermap插件,网络流量大小和拥塞情况一清二楚,随着cacti的没落,weathermap插件也不能再继续使用,此时就需要学习了解新的替代方案。 经过研究和实际测试,发现zabbix的拓扑图有这个功能。 以下验证了zabbix的拓扑图显示线路流量的功能。 2. Zabbix 6显示拓扑图流量过程 选择监测-拓扑图 点进Local ne...

u013930899的博客 8477

list Lambda简单用法

Lambda在jdk1.8里面已经很好用了,在这里不讲底层的实现,只有简单的用法,会继续补全。 首先一个list我们要使用lambda的话,需要使用它的stream()方法,获取流,才能使用后续的方法。 基础类User.java public class User { public long userId; public User() { } public User(long...

秦怀杂货店 8532

逆向CarPlay协议时,除了USB主从切换,你还需要注意这3个关键点

本文深入探讨逆向CarPlay协议时的3个关键点,包括MFi协议背景、多通道协同工作机制和协议分析工具的高级过滤技巧。特别解析了USB主从切换后的复杂交互过程,帮助安全研究员和逆向工程师更好地理解CarPlay协议的核心机制与潜在安全研究切入点。

weixin_29164497的博客 381

java lambda filter 获取list中符合条件的对象元素

如题:list中存放beans,想获取某个条件下的bean,按照传统的方式需要遍历list,拿着bean的字段去判断相等,然后返回符合条件下的bean对象,使用lambda的话,可以减少代码,如下: Object bbb = list.stream().filter(item -> item.getName().equals("bbb")).findFirst().get(); 代码: package com.chunge.utest.test; import java.util.Arr

AVATAR 1万+

十、强势股的起爆点:第三类买点的实战精解

本文深入解析强势股交易中的第三类买点(三买)实战技巧,涵盖两种经典模式:突破首个中枢后的回踩和底部反转后的直接脱离下跌中枢。通过详细案例和数据分析,揭示三买在捕捉主升浪起爆点时的黄金信号作用,帮助投资者优化风险收益比,提升短线交易成功率。

weixin_30260191的博客 310

【应用】OpenClaw玩转有道云笔记

功能名称核心原理实操示例(直接复制可用)实操避坑+补充说明网页剪藏插件自动抓取网页正文、下载图片,通过 API 发送到你的有道云笔记,内联图片避免防盗链失效帮我把这个网页剪藏到云笔记:https://example.com/article1. 避坑:知乎、公众号等需登录的网站,先在浏览器登录再剪藏;2. 原理:自动过滤广告,只留正文;3. Twitter/X 剪藏需额外配置 APIFY_API_TOKEN(见1.2.4)创建笔记。

海兰 712

Lambda表达式

文章目录1.什么是Lambda表达式2.为什么使用Lambda表达式3.Lambda表达式语法4.函数式接口4.1 什么是函数式接口4.2 自定义函数式接口4.3 Java内置函数式接口5.方法引用6.构造器引用7.数组引用8.Lambda表达式的作用域8.1 访问局部变量8.2 访问局部引用,静态变量,实例变量8.3 Lambda表达式访问局部变量作限制的原因9.Lambda表达式的优缺点 1.什么是Lambda表达式 Lambda表达式,也可称为闭包。类似于JavaScript中的闭包,它是推动Java

小赵的呢 7085

Lumerical 教程,包含作者个人理解及相关设计案例 (目前共计184篇,持续更新中)

4138。

u011699626的博客 1608

c# lambda表达式学习(1)

using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; namespace ConsoleApplication1 {     class Program     {         delegate

c6088的专栏 395

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

lambda表达式 拉姆达

lambda表达式拉姆达 学习这个之前,需要明确 有一种接口叫做函数式接口,只允许接口里面只有一个函数 可以使用 @FunctionalInterface进行注解 如果这个接口里面定义了两个方法,就会报错,当然,这种接口主要是针对lambda表达式使用 函数式接口允许: 1.定义默认方法 2.定义静态方法 3.定义Object里的public方法 明确了这一点,然...

g123321dad的博客 2950

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

拉姆达表达式二

上一篇中我们讲到拉姆达表达式在多线的运用,上一篇的链接为::http://blog.csdn.net/jx1234562/article/details/80813863今天我们要聊的是拉姆达表达式在Java集合框架的运用,在这里forEach是属于List中的方法不说了,直接上代码::具体的我在代码里做了解释,这里就不多说了,所有的集合框架都有这个方法,支持本特性!在这里我想说博主也是一个大学生...

jx1234562的博客 638

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Lambda拉姆达表达式

刚开始接触的时候感觉无从下手、茫然不解,不过没有学不会的东西。 通过几个星期的学习,慢慢从中有所领悟。 拉姆达表达式常用于委托。 例如: 1 a => a.Equals("string"); 2 //原形为: 3 (a) => { return a.Equals("string");} 4 //相当于e...

weixin_33982670的博客 188

后端学习----java10多进程静态代理模式、拉姆达表达式

ss

qq_43543512的博客 166

实训笔记9.12

访问控制修饰符 class 类名(主构造器){ 类体 }

cai_4的博客 609

拉姆达表达式学习(2)

本文转载自:http://www.cnblogs.com/zhouji432600/archive/2010/05/30/1747383.html在.net3.5里面,委托的定义和实现被大大的简化了!使用关键字Func或Action就可以定义一个委托,使用拉姆达表达式就可以实现一

xintingandzhouyang的专栏 3348
上一篇: .NET基础学习(LINQ)
下一篇: JAVA/Android 读写文件,避免中文乱码 FileWriter乱码 .
cg_program
博客等级 码龄19年 245粉丝 147原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值