南开java_Java8学习

1.Lambda

可定义为一种简洁、可传递的匿名函数,Lambda本质上是一个函数,虽然它不属于某个特定的类,但具备参数列表、函数主体、返回类型,甚至能够抛出异常

Lambda是匿名的,它没有具体的函数名称

Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)

6bee5c91c51ee0a19616cc78925f859f.png

很明显 "->"箭头是lambda的特征

代码示例:

(String str) -> str.length() //返回给定字符串的长度(隐含return语句)

()-> 233 //始终返回233的无参方法(隐含return语句)

(User user)-> user.getAge() > 20 //返回当前用户是否年龄大于20岁,返回一个boolean值(隐含return语句)//包含多行表达式,需用花括号括起来,并使用return关键字返回

(int x, int y) ->{int z = x*y;return x +z;

}

使用Lambda与传统写法对比:

//使用Lambda

Runnable r1 = () -> System.out.println("Hello world 1");

传统匿名类:

03b40fa2f4bdd3073cc244ce291b819c.png

3b252d41f5fadaf4299cd753500c265c.png

f81fef091eca7eccd565bc90e0cc6ead.png

10801cc834e9ea9eae694f872a77a9d8.png

2ebf4157fce01369f2b559123a017f0d.png

dda2545febeeacdd2f8f1713a2363983.png

3b7fa602058276145a6347206254eb98.png

3.流失Java8引入的全新概念,它用来处理集合中的数据,暂且可以把它理解为一种高级集合

64f2693140ce910670b02d5d7af7f22f.png

流的特点:

1.只能遍历一次

47453b28c7463f5fa5e8b51e4cdd7faf.png

2.采用内部迭代方式:

若要对集合进行处理,则需要我们手写处理代码,这就叫外部迭代

而要对流进行处理,我们只需要告诉流我们需要什么结果,处理过程由流自行完成,这就成为内部迭代

流的操作过程:

分为:中间操作和终端操作

中间操作:当数据源中的数据上了流水线后,这个过程对数据进行的所有操作都称为“中间操作"。中间操作仍然会返回一个流对象,因此多个中间操作可以串起来形成一个流水线

终端操作:当所有的中间操作完成后,若要将数据从流水线上拿下来,则需要执行终端操作,终端操作将返回一个执行结果,这就是你想要的数据。

流的具体使用过程:1.准备一个数据源;2.执行中间操作;中间操作可以有多个,它们可以串连起来形成流水线;3.执行终端操作  执行终端操作后本次流结束,你将获得一个执行结果

Stream 接口:

List转Stream:

list.stream() // 转stream

// 并发处理

list.parallelStream()

filter(过滤)

Stream filter(Predicate super T> predicate);

map(元素转换)

edc045c89acd4e0a59bb468b2e13fd9b.png

flatMap(元素转换)

73552bc809a39336dda520cabe5ca645.png

distinct(去除重复,对象需要重写equals、hashCode)

Stream  distinct();

sorted(排序)

b4c1a634498dae4d1ae82ecc75fee60a.png

peek(生成新的流:流失单向的,例如用于日志打印)

00ac4b9c62b0c0616834098cb1e07b49.png

limit(取前面n个元素)

fa1423031bf0beb8622d73cff63cbfcc.png

skip(跳过n个元素)

8474869fd5231bb7518ea0af7d2622e3.png

forEach(遍历)

4be5ea09b774e8352c3fc5588f7860b7.png

toArray(转换成数组)

2d5ddd4ccf93f3e59418f9d33d473412.png

reduce(结果归并)

23333a5eb8b8c2f30d32fc1f117a357c.png

edc9e038e4a91853bf7e7b21d103e20a.png

dc030feb4cfb2bf37e20e4cccb15a941.png

count(计数)

long  count()

88dde0a2633d410dcb77309ae82fd862.png

f5e1eeb3ec8083e2e043cb23489cdf63.png

///

Stream在使用之前,先要获取:数据源有多种形式:

1.集合:

c9015e721221893c1a1e04865d16e029.png

e7e4f6345602d204ab6397a5ff5410cb.png

8ea9e175c3152cb86c414085180743de.png

Java7简化了IO操作,把打开IO操作放在try后的括号中即可省略关闭IO的代码

映射:

对流中的每个元素执行一个函数,使得元素转换成另一种类型输出,流会将每一个元素输送给map函数,并执行map中的lambda表达式,最后将执行结果存入到一个新的流中

归约:归约是将集合中的所有元素经过指定运算,折叠成一个元素输出,如:求最值、平均数等,这些操作都是将一个集合的元素折叠成一个元素输出,在流中,reduce函数能实现归约

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值