java流式编程_Java8流式编程

前言

在前天的时候,java12都出了,但是我还在用java6的陈旧的编码方式,需要改进到java8的流式编程,此文主要是用来记录流式编程的积累

个人的主要理解

java真正的支持了函数式的编程,同时加入了streamApi来进行支持Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。

Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。

Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。

这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。

元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。 Stream编程

总而言之,流式操作主要分为了中间操作和最终操作

Intermediate 操作

非最终操作,也就是中间操作map (mapToInt, flatMap 等)

filter

distinct

sorted

peek

limit

skip

parallel

sequential

unordered

Terminal 操作

最终操作forEach

forEachOrdered

toArray

reduce

collect

min

max

count

anyMatch

allMatch

noneMatch

findFirst

findAny

iterator

Short-circuiting 操作

短程巡回操作anyMatch

allMatch

noneMatch

findFirst

findAny

limit

实操例子

将一个列表/数组进行处理进行转换

例子如下:

Set collect = projects

.stream()

.map(CustomProject::getId)

.collect(Collectors.toSet());

代码翻译:projects是CustomProject的一个List

然后map()进行一个映射

将其中的id属性去除,

collect()可以转换成另外的数据结构集合

filter过滤和forEach

例子如下:

all.stream().filter(greyTask ->

greyTask.getType() == GreyTaskType.PERSON

).forEach(greyTask1 -> {

List source = greyTask1.getSource();

source.stream().filter(username -> username.startsWith("B-")).forEach(bUser -> {

bUser = "B-" + 处理bUser的代码;

});

source.stream().filter(userId -> userId.startsWith("C-")).forEach(cUser -> {

cUser = "C-" + 处理cUser的代码;

});

greyTask1.setSource(source);

});

转换成map

例子如下:

List list = new ArrayList();

list.add(new Person("1001", "小A"));

list.add(new Person("1002", "小B"));

list.add(new Person("1003", "小C"));

//将list转换map

Map map = list.stream().collect(Collectors.toMap(Person::getId, Person::getName));

但是有一点需要注意,就是Collectors中的tomap 方法,value值也是不允许重复的,如果想要转成HashMap的话,还是使用forEach比较方便

处理String类型的String

对List类型进行处理的时候,需要重新返回一个List,因为String都是final的

List collectUserB = source.stream().filter(username -> username.startsWith("B-")).map(bUser -> {

bUser = "B-" + userService.getPerson(bUser.replace("B-", "")).getDisplayName();

return bUser;

}).collect(Collectors.toList());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值