文档章节

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
博文 30
码字总数 36820
作品 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
2018/06/06
0
0
Java8学习:Lambda表达式与Functional接口

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

王爵nice
2014/07/03
0
1
Java8 Lambda【简】

Java8 Lambda Lambda是一个表达式,也可以说它是一个匿名函数。然而在使用它或是阅读Lambda代码的时候,却显得并不那么容易。因为它匿名,因为它删减了一些必要的说明信息(比如方法名)。 ...

anlve
2018/03/08
0
0
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

没有更多内容

加载失败,请刷新页面

加载更多

租房软件隐私保护如同虚设

近日,苏州市民赵先生向江苏新闻广播新闻热线025-84658888反映,他在“安居客”手机应用软件上浏览二手房信息,并且使用该软件自动生成的虚拟号码向当地一家中介公司进行咨询。可电话刚挂不久...

linux-tao
40分钟前
1
0
分布式项目(五)iot-pgsql

书接上回,在Mapping server中,我们已经把数据都整理好了,现在利用postgresql存储历史数据。 iot-pgsql 构建iot-pgsql模块,这里我们写数据库为了性能考虑不在使用mybatis,换成spring jd...

lelinked
今天
2
0
一文分析java基础面试题中易出错考点

前言 这篇文章主要针对的是笔试题中出现的通过查看代码执行结果选择正确答案题材。 正式进入题目内容: 1、(单选题)下面代码的输出结果是什么? public class Base { private Strin...

一看就喷亏的小猿
今天
1
0
cocoapods 用法

cocoapods install pod install 更新本地已经install的仓库 更新所有的仓库 pod update --verbose --no-repo-update 更新制定的仓库 pod update ** --verbose --no-repo-update...

HOrange
今天
3
0
linux下socket编程实现一个服务器连接多个客户端

使用socekt通信一般步骤 1)服务器端:socker()建立套接字,绑定(bind)并监听(listen),用accept()等待客户端连接。 2)客户端:socker()建立套接字,连接(connect)服务器,连接上后...

shzwork
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部