文档章节

java 8 lambda 学习(一)

H
 Haloooooo
发布于 2017/05/15 21:14
字数 526
阅读 26
收藏 0
点赞 0
评论 0

 

lambda的几种形式 

    Runnable a = () -> System.out.println("hello world");

    ActionListener b = event -> System.out.println("button action");

    Runnable c = () -> {

        System.out.println("hello");

        System.out.println("world");

    }

    BinaryOperator<Long>  d = (x,y) -> x+y;

    BinaryOperator<Long>  e = (long x , long y) -> x + y;

a 表达式 不包含参数 ,使用()表示没有参数,该表达式实现了Runnable接口,接口只有一个方法,返回void;

b 表达式 包含一个参数 可省略 ();

c 表达式 使用代码块表达;

d 表达式 d的类型是BinaryOperator 而不是x+y的和,等号右边是一个函数,参数类型由编译器推断;

e 表达式 指定参数类型;

lambda 表达式中的引用的(局部变量)是值而不是变量或既成事实上的final变量

String a = "aa";
Button b = new Button();
b.addActionListener(event -> System.out.print("aa"+a));

串a 没有改变 所以相当于final的 是即成事实上的final

但是如果改变a 所指向的对象;

String a = "aa";
a = "bb";
Button b = new Button();
b.addActionListener(event -> System.out.print("aa"+a));

编译器就会报错:variable used in lambda expression should be final or effiectively final.

所以lambda表达式也叫闭包(点击直接进入百度百科)。未赋值的变量与周边环境隔离起来,进而被绑定到一个特定的值。

函数接口:具有单个抽象方法的接口,用来表达lambda表达式的类型

接口 参数 返回类型 示例
Predicate<T> T boolean 今天写博客了么
Consumer<T> T void 打印一段话
Funcation<T,R> T R 枚举的valueof Map的get
Supplier<T> Null T 工厂方法
UnaryOperator<T> T T 逻辑非???
BinaryOperator<T> (T,T) T 加减乘除

 

类型推断

Predicate<Integer> dd = x -> x>5;
if(dd.test(1)){}

上表达式可判断

BinaryOperator a = (x,y) -> x+y;

上表达式无范性 , 无法判断

内部迭代

java.util.List<Integer> aa = new ArrayList<>();
aa.add(55);
aa.add(44);
aa.add(1);
aa.add(2);
long count = aa.stream()
        .filter(i -> i>5)
        .count();
System.out.print(count);

找出List中大于5的数;

stream 该方法返回内部迭代的响应接口Stream

filter 过滤 指保留通过某项测试的对象 该函数返回 true 或 false

count 计算给定Stream里包含多少个对象。

© 著作权归作者所有

共有 人打赏支持
H
粉丝 0
博文 25
码字总数 26126
作品 0
青岛
程序员
Java 8里面lambda的最佳实践

Java 8已经推出一段时间了,越来越多开发人员选择升级JDK,这条热门动弹里面看出,JDK7最多,其次是6和8,这是好事! 在8 里面Lambda是最火的主题,不仅仅是因为语法的改变,更重要的是带来了...

OSC闲人
2015/04/30
0
41
Lambda 表达式有何用处?如何使用?(针对Java8)

什么是Lambda? 我们知道,对于一个Java变量,我们可以赋给其一个“值”。 如果你想把“一块代码”赋给一个Java变量,应该怎么做呢? 比如,我想把右边那块代码,赋给一个叫做aBlockOfCode的J...

亭子happy
06/06
0
0
Java8学习:Lambda表达式与Functional接口

Lambda表达式(也称为闭包)是整个Java 8发行版中最受期待的在Java语言层面上的改变,Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中),或者把代码看成数据:函数式程序员对...

王爵nice
2014/07/03
0
1
Java 8会干掉Scala吗?

2014-04-15 孙镜涛 InfoQ 最令人期待的Java 8已于2014年3月18日发布,该版本包含很多令人兴奋的新特性,被认为是自Java 5发布以来对Java做出的最大改变。对于开发者而言,最值得注意的特性包...

Yamazaki
2014/04/23
0
0
【java8】java新特性(二)——lambda表达式

一,前言 在上一篇博客中,小编向大家抛转引玉,简单说明了[ Java8 ](http://blog.csdn.net/kisscatforever/article/details/79572194 ),其实Java 8在2014年3月18日,就发布了。可以说程序...

kisscatforever
03/20
0
0
Java 8来了!!! 极客学院推出中国第1个Java8课程,详解Lambda 表达式

3月发布的Java 8有哪十大新特性,你知道不? 不知道?没关系,因为没几个家伙知道。不过看到这条消息的你将非常幸运:极客学院推出中国第1个Java 8课程,详细讲解最核心的Lambda 表达式使用方...

jikexueyuan
2014/04/09
0
0
Java 8 新特性,Lambda,方法引用,Stream,Optional

在C++、Python等语言里都有Lambda表达式,Java 8也新增了这一特性。 在java给变量赋值是这样的: 如果你想把“一块代码”赋给一个Java变量,应该怎么做呢? 比如,我想把右边那块代码,赋给一...

saulc
07/10
0
0
java lambda 且行且珍惜

一、先看一个最经典的例子 new Thread(new Runnable() { @Override public void run() { System.out.println("run..."); }}).start(); 这是我们以前多线程的写法,在匿名类里面实现run方法,你...

whaon
2014/04/03
0
0
Java 8新特性探究 前言

自2013年6月13日,oracle就已经发布的Java 8特性完备版本(M7),但最终GA版本将在2014年3月18日(已第二次跳票,原计划今年9月发布的,据官网宣称是为了解决安全问题......),相信大家多多...

OSC闲人
2013/11/05
0
17
Effective Java 第三版——42.lambda表达式优于匿名类

Tips 《Effective Java, Third Edition》一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8...

M104
05/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

mybatis中session.getMapper方法源码分析

0开始代码AuthorMapper mapper = session.getMapper(AuthorMapper.class); 1 DefaultSqlSession类 @Override public <T> T getMapper(Class<T> type) { //最后会去调用MapperRegistry.getMap......

writeademo
3分钟前
0
0
spring cloud zuul网关的作用

zuul一般有两大作用,1是类似于Nginx的网址重定向,但zuul的重定向的一般是整个spring cloud里在Eureka注册中心的模块. zuul: ignored-services: '*' sensitiveHeaders: routes: ...

算法之名
3分钟前
0
0
java按比例之原图生成缩略图

package com.wxp.test; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import javax.imageio.ImageIO; import sun.......

恋码之子
13分钟前
0
0
SpringCloud 微服务 (十五) 服务容错 Hystrix

壹 工作中的微服务架构,某个服务通常会被多个服务调用或者多层调用完成需求,如果某个服务不可用,导致一个系统功能不可用或者服务直接没用了的情况,这种情况称为雪崩效应 有A服务调用B服务,B服...

___大侠
15分钟前
0
0
Spring框架中的设计模式(五)

Spring框架中的设计模式(五) 通过以前的4篇文章,我们看到Spring采用了大量的关于创建和结构方面的设计模式。本文将描述属于行为方面的两种设计模式:命令和访问者。 前传: Spring框架中的...

瑞查德-Jack
18分钟前
0
0
解决phpstorm运行很卡问题!

phpStorm一旦达到这个临界值,所有智能提示、自动补全都失效了 这TM就很尴尬了,顿时感觉自己就是个废人了,纯手写代码跟便秘一样 众所周知phpStorm基于JAVA,那么这个内存限制肯定跟JAVA的虚...

sjcehui2010
20分钟前
0
0
javascript前端AES加密解密

参考了一下网上的代码加上自已的一些想法,修改,key也可以是中文, 要引入一个aes.js的js文件。 html代码 <html> <head> <title>AES加解密</title> <meta http-equiv="Content-Type"......

oisan_
24分钟前
0
0
MacOS和Linux内核的区别

有些人可能认为MacOS和Linux内核有相似之处,因为它们可以处理类似的命令和类似的软件。甚至有人认为苹果的MacOS是基于linux的。事实上,这两个内核的历史和特性是非常不同的。今天,我们来看...

六库科技
28分钟前
0
0
Vue.js-自定义事件例子

自定义组件的 v-model 2.2.0+ 新增 一个组件上的 v-model 默认会利用名为 value 的 prop 和名为 input 的事件,但是像单选框、复选框等类型的输入控件可能会将 value 特性用于不同的目的。m...

tianyawhl
31分钟前
0
0
RobotThread.cpp

#include "RobotThread.h"RobotThread::RobotThread(int argc, char** pArgv, const char * topic) :m_Init_argc(argc), m_pInit_argv(pArgv), m_topic(topic){/** ......

itfanr
34分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部