Stream - forEach、forEachOrdered

void forEach​(Consumer<? super T> action)
void forEachOrdered​(Consumer<? super T> action)

这两个方法功能类似,使用方法一致,区别就在于并行处理的时候forEachOrdered是严格按照流中元素顺序执行,而forEach是无序的因此效率高一点。

这里就那forEach为例进行说明;

forEach方法作用就是遍历流中元素对元素执行参数函数,这个方法对于集合中是java基本数据类型的数据来说是没什么作用,为什么呢就是因为其没有返回数据,又不能修改流和集合中的元素(无论什么数据类型Stream中的元素都不可修改),比如我们定义个参数函数对流中每个元素进行处理,但是处理完不会把处理之后的数据放到新的流中返回给我们使用,而之前流因为使用过已经关闭不能再使用。这个方法使用最多的就是打印输出流中的元素,上面很多例子用到这种方法。

List<List<String>> list = List.of(List.of("a","b","c","d"), List.of("1","2","3","4"), List.of("one","two","three"));

        list.stream().forEach(onelist -> onelist.stream().forEach(System.out::print));

 

对于非基础数据类型的数据集合来说这个方法还是挺好用的,看下面例子:

List<User> users = List.of(new User("111@qq.com","beijing"), new User("222@qq.com","shanghai"), new User("333@qq.com","tianjin"));

        users.forEach(a -> System.out.println(a.getAddr()));

        users.stream().forEach(a -> a.setAddr("china - "+a.getAddr()));

        users.forEach(a -> System.out.println(a.getAddr()));

运行结果:

beijing

shanghai

tianjin

china - beijing

china - shanghai

china – Tianjin

我们通过forEach方法批量修改User对象数组中user的地址,给每个地址前面加上china前缀。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值