文档章节

java 8 lambda 学习(一)

H
 Haloooooo
发布于 2017/05/15 21:14
字数 526
阅读 31
收藏 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
博文 29
码字总数 36527
作品 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
Oracle提交Java 7 和Java 8规格

Oracle提交Java 7 和Java 8规格 发表于:2010-11-18 03:21 PM 即将来临的Java版本致力于减少冗余代码,增加多核性能,并且催生出动态脚本语言 周二一名Oracle官员详细介绍了Oracle提交的版本...

xyxzfj
2010/11/19
649
0
Java 8 最终发布日期敲定,有 bug 也要发布

Oracle 公司计划于 2014 年 3 月 18 日发布 Java 8,这一日期已经敲定,即使届时该版本中仍存在一些小的 bug(“非致命”bug),也要按计划发布。 这一消息来自 Oracle 公司的 Java 8 版本发...

oschina
2014/01/16
5.5K
39

没有更多内容

加载失败,请刷新页面

加载更多

我的Linux系统九阴真经

在今天,互联网的迅猛发展,科技技术也日新月异,各种编程技术也如雨后春笋一样,冒出尖来了。各种创业公司也百花齐放百家争鸣,特别是针对服务行业,新型互联网服务行业,共享经济等概念的公...

linux-tao
31分钟前
3
0
MySQL: Starting MySQL….. ERROR! The server quit without updating PID file

前段时间打包了一个数据库镜像,但是启动容器之后发现报错 ··· ··· MySQL: Starting MySQL….. ERROR! The server quit without updating PID file 查了网络上的解决方案比较全,遂转帖...

blackfoxya
33分钟前
2
0
C4C销售订单行项目价格维护方法

需求很简单,能够创建销售订单,在行项目里添加产品,带出价格来,同时把总价显示在销售订单抬头区域。 如下图所示: 下面是具体配置。 Business Configuration里,点击Sales Order的配置: ...

JerryWang_SAP
今天
12
0
deepin中配置robot framework环境

本文永久更新地址:https://my.oschina.net/bysu/blog/2989005 【若要到岸,请摇船:开源中国 不最醉不龟归】 1.在终端中输入pip,回车,如果提示没有该命令,则先安转pip sudo apt-get inst...

不最醉不龟归
今天
13
0
OSChina 周日乱弹 —— 钱不还,我就当你人不在了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享Bigleaf的单曲《小鹿》 《小鹿》- Bigleaf 手机党少年们想听歌,请使劲儿戳(这里) 周日在家做什么? 做手工呀, @poorfis...

小小编辑
今天
261
5

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部