`
zhangwei_david
  • 浏览: 476406 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

lamda 学习笔记(一)

    博客分类:
  • Java
阅读更多

   lamda 是Java8中增加的一个新特性。lamda表达式语法很简单,使用-> 将参数列表和表达式体分割开来。

                     (Type1 param1, Type2 param2, ..., TypeN paramN) -> { //do somthing}

 

      (int x,int y)-> x+y   等价于 (int x,int y)->{x+y;}

 

如果有一个列表[1,2,3,4,5,6] 需要遍历并打印出来,如果不是用lamda表达式实现方式如下:

	List<Integer> list=Arrays.asList(1,2,3,4,5,6);
		
		list.forEach(new Consumer<Integer>() {

			@Override
			public void accept(Integer t) {
				System.out.println(t);
			}
		});

 

而使用lamda表达式的写法则如下:

List<Integer> list=Arrays.asList(1,2,3,4,5,6);
		
		list.forEach(i->System.out.print(i));

      当lambda表达式只是调用现有类中的具名方法时,编写lambda表达式更好的方式是使用已有的名字。

List<Integer> list=Arrays.asList(1,2,3,4,5,6);
		list.forEach(System.out::println);

         

       通过上面的描述我们对Lambda有了一个大概的印象。Lambda可以简单的理解为一个匿名函数,虽然没有名字但是具有参数列表,方法体,返回类型以及抛出异常列表。

     Arrays.asList(1,2,3,4,5,6).forEach(System.out::println);

 这段代码是如何确定类型的呢? 首先可以推断出列表中的类型为Integer,forEach接收的表达式参数类型就是 Integer。

 

 

      静态方法   refType::staticMethod      (args)->refType.staticMethod(args);

      绑定实例    expr::instMethod  

      未绑定实例  RefType::instMethod

     构造器         ClsName::new

 

 

list.forEach(Integer::new);
list.forEach(String::valueOf);

 

 

     

 

     通过上面的示例可以看到lamda可以和匿名内部类进行转换,当然不是所有内部类都可以替换为lamda表达式的,lamda表达式必须实现一个函数式接口(java.util.function);但是二者还是有很多显著却别的。

  • 内部类会创建一个拥有唯一标示的新对象,而lamda表达式可能没有,也可能有,这取决于具体实现。
  • 内部类的声明会创建一个新的命名作用域,在这个作用域中,this,super指的是内部类本身的当前实例;而lamda 表达式不会引入任何新的命名作用域。
public class Hello {

	Runnable r1=()->{System.out.println(this);};
	
	Runnable r2=new Runnable() {
		
		@Override
		public void run() {
			System.out.println(this);
		}
	};


	public static void main(String ...args){
		new Hello().r1.run();
		new Hello().r2.run();

	}
}

  结果是:

com.david.demo.lamda.core.Hello@4eec7777
com.david.demo.lamda.core.Hello$1@3b07d329

 

java.util.function中提供的基本函数式接口有:

  void Consumer<T> (T t) ;   如:s->System.out.println(s);

  boolean Predicate<T>(T t); 如: s->s.isEmpty();

  T     Supplier<T>();             如: ()->new String();

  U    Function<T,U>(T t);       如: s->new Integer(s);

 

0
1
分享到:
评论

相关推荐

    javase6 学习笔记(李兴华培训课堂笔记所有.)

    JavaSE6学习笔记是针对Java初学者和进阶者的一份宝贵资料,由知名讲师李兴华的培训课堂笔记汇编而成。这份笔记全面、详细地涵盖了Java SE 6版本的核心概念和技术,对于理解Java编程语言的基础以及进阶特性具有重要...

    AI大模型的学习笔记,里面有许多大模型论文的学习内容,值得研究

    【AI大模型】的学习笔记涵盖了从基础到进阶的各种知识点,尤其关注了GPT系列模型的发展和能力。GPT-3作为其中的代表性工作,它的出现标志着AI模型参数规模的巨大跃升,拥有1750亿参数,这使得模型具备了强大的few-...

    Lambda表达式学习教程

    `.txt`文件可能是笔记或额外的代码示例,`.url`文件则可能指向相关的在线资源,如编程论坛或教程网站,这些都能为深入学习提供帮助。 总的来说,Lambda表达式的学习需要掌握它的基本语法、作用以及如何在实际项目中...

    变边界层的滑膜控制simulink+手写笔记(跟踪期望轨迹)

    在本主题中,“变边界层的滑膜控制simulink+手写笔记”是关于如何利用Simulink来实现这一控制算法的一个实例,用于跟踪期望轨迹。Simulink是MATLAB的一个扩展工具箱,它允许用户通过图形化界面构建和仿真动态系统的...

    老男孩 python 课堂作业.zip

    在描述中提到的“Python学习笔记,复习巩固,大作业!!!”暗示这份资料可能不仅包括作业,还可能有学习笔记,这些笔记可能涵盖了Python的基础知识、进阶概念以及可能的实战项目,旨在帮助学习者巩固所学内容。 在...

    Python 家庭作业.zip

    通过这份"Python学习笔记",学习者可以深入理解和掌握以上这些概念,并通过"作业"部分实践应用,提高编程技能。对于初学者来说,这是一个很好的学习路径,理论与实践相结合,能有效提升编程能力。而对于有一定基础的...

    最大最小值零点问题的matlab代码-machine-learning:机器学习

    最大预设零点问题的matlab代码机器学习笔记 线性和多项式回归 数值预测和预测。 属于监督学习类别,因为训练数据包含标记的(数字)数据。 通过对回归参数使用优化算法进行训练。 优化目标是成本函数的减少,成本...

    CS笔记

    CS笔记,顾名思义,是一份关于计算机科学(Computer Science,简称CS)的学习资料,主要涉及了Python编程语言的相关内容。Python是一种广泛应用于数据处理、科学计算、Web开发、自动化脚本等多个领域的高级编程语言...

    抢先微软,Google版Copilot上线!谷歌宣布给Google全家桶开放Bard功能.pdf

    Bard 是谷歌最新推出的 AI 聊天机器人,基于 LaMDA 训练,专门针对对话进行阅读训练,拥有非常强大的对话能力,能够理解用户的语境和语气,生成合适的回答,并且还能为用户提供合适的建议和信息。 知识点2:Bard 的...

    codecademy_python:练习来自cadecademy的东西

    Python是一种高级编程语言,以其简洁、易读的语法而闻名,广泛应用于数据科学、机器学习、Web开发等多个领域。通过Codecademy的课程,学习者可以逐步掌握Python的基础到进阶知识,为自己的编程技能打下坚实基础。 ...

    CS50:我的CS50课程代码

    "CS50: 我的CS50课程代码"很可能是某位学生或者参与者在学习CS50过程中编写的代码集合,这个压缩包文件"CS50-main"可能包含了整个课程中的项目代码、实验练习以及可能的笔记或解决方案。 在CS50课程中,Python作为...

    100_Days_of_Code:100天的代码项目

    100_Days_of_Code-main文件可能包含参与者每天完成的代码、日志、笔记或者项目文件,通过这些文件可以跟踪和回顾每天的学习进度和成果。通过这样的系统化学习,开发者将能够全面掌握Python编程,并建立起强大的编程...

    精湛的准备

    在"superb_preparation-master"这个压缩包中,可能包含了上述知识点的练习题、解决方案或者笔记,可以帮助你深入理解和巩固这些Python3的核心知识。通过不断实践和刷题,例如在LeetCode上解决相关问题,可以有效地...

Global site tag (gtag.js) - Google Analytics