文档章节

java 8 lambda 学习(一)

H
 Haloooooo
发布于 2017/05/15 21:14
字数 526
阅读 30
收藏 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
博文 27
码字总数 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

没有更多内容

加载失败,请刷新页面

加载更多

MySQL autocommit探究

-- sessionA:tx_isolation=REPEATABLE-READmysql> select connection_id();+-----------------+| connection_id() |+-----------------+| 28 |+-----------------+......

安小乐
8分钟前
4
0
c++多线程锁 Mutex  自动判断死锁

c++多线程锁可以使用absl::Mutex std::mutex这两种,下面是demo代码。 使用absl:Mutex的时候打印: [mutex.cc : 1338] RAW: Cycle: [mutex.cc : 1352] RAW: mutex@0x683b68 stack: @ 0x43856......

青黑
27分钟前
1
0
Blockathon2018(成都站)比赛落幕,留给我们这些区块链应用思考

9月14日,HiBlock区块链社区主办的第二届Blockathon在成都菁融国际广场成功举行,30名参赛者分为5支队伍在48小时内完成区块链项目的创意、开发及路演,经过紧张的开发及现场评选,最终币托(...

HiBlock
32分钟前
0
0
71.告警系统主脚本 配置文件 监控项目

20.20 告警系统主脚本(main.sh) 20.21 告警系统配置文件 20.22 告警系统监控项目 20.20 告警系统主脚本(main.sh): ~1.约定:把以后所有的shell脚本放在/usr/local/sbin下,也方便我们查...

王鑫linux
39分钟前
0
0
装饰者模式

装饰者模式 Q:何为装饰模式? ()地给一个对象添加一些额外的(),并且()时,并不影响原对象。扩展功能来说,装饰器模式相比生成子类更为灵活。 Q:使用场景? 1.想要在不影响其他对象的情况下...

阿元
59分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部