java流处理_Java流式处理

基本介绍

在java8之前,很多时候我们都需要获取到集合底层的数据,将其进行处理后在返回,而j这种情况都需要我们自己来Iterator遍历。

受到函数式编程的影响,java8以后新增的java.util.stream包中的类提供了Stream API,以支持对元素流进行函数式操作。

Stream它并不是一个容器,它只是对容器的功能进行了增强,添加了很多便利的操作,例如查找、过滤、分组、排序等一系列的操作。

并且有串行、并行两种执行模式,并行模式充分的利用了多核处理器的优势,使用fork/join框架进行了任务拆分,同时提高了执行速度。

使用流式操作大大方便了我们对集合的处理,并且增强了代码的可读性。

常用操作

获取流的方法

通过集合获取:java8中的Collection提供了两个获取流的方法:

default Stream stream() :获取串行流

default Stream parallelStream():获取并行流

通过数组获取:使用Arrays的静态方法stream

static Stream stream(T[] array)

也可通过Stream接口本身提供的generate方法和of方法来获取流,这里就不加赘述了。

中间操作

中间操作也就是操作的返回值仍为流的操作

先创建一个list

List list = new ArrayList<>();

list.add(10);

list.add(35);

list.add(165);

list.add(76);

list.add(234);

list.add(13);

filter(): 对元素进行过滤

如果要筛选出大于30小于100的元素。

普通操作

for (Integer integer : list) {

if (integer>30 && integer<100){

System.out.println(integer);

}

}

流式操作

list.stream().filter(item -> item>30&&item<100).forEach(System.out::println);

这样操作即简单,每一步的目的也一目了然。

sorted():对元素排序

将list元素从大到小排序

普通操作

Collections.sort(list, new Comparator() {

@Override

public int compare(Integer o1, Integer o2) {

return o1-o2;

}

});

System.out.println(list);

流式操作

list.stream().sorted((o1,o2)-> o1-o2).forEach(System.out::println);

map():元素映射

将元素中的每一个数变为原来的2倍

普通操作

for (int i = 0; i < list.size(); i++) {

list.set(i,list.get(i)*2);

}

for (Integer integer : list) {

System.out.println(integer);

}

流式操作

list.stream().map(item-> item=item*2).forEach(System.out::println);

distinct():去除重复的元素

List temp = new ArrayList<>(list.size());

for (Integer integer : list) {

if (!temp.contains(integer)) {

temp.add(integer);

}

}

list.clear();

list.addAll(temp);

System.out.println(list);

流式操作

list.stream().distinct().forEach(System.out::println);

limit():对元素进行截断

流式操作

list.stream().limit(3).forEach(System.out::println);

skip():跳过前面几个元素

流式操作

list.stream().skip(3).forEach(System.out::println);

最终操作

forEach():遍历每个元素。

上面已经使用过了forEach,事实上,上面的写法是一种简写,完整的写法如下

list.stream().forEach(a-> System.out.println(a));

reduce():把Stream 元素组合起来。例如,字符串拼接,数值的 sum,min,max ,average 都是特殊的 reduce。

将元素累加,流式操作

System.out.println(list.stream().reduce((a, b) -> a + b).get());

collect():返回一个新的集合。

返回一个Set,流式操作

list.stream().collect(Collectors.toSet()).forEach(System.out::println);

min():找到最小值。

System.out.println(list.stream().min((o1, o2) -> o1 - o2).get());

max():找到最大值。

System.out.println(list.stream().max((o1, o2) -> o1 - o2).get());

上面是以List作为演示,其他容器基本都一致,不过Map类型需要先调用entrySet()方法在进行如上处理。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值