Java_Stream流式计算

什么是Stream流

定义:支持顺序和并行聚合操作的元素序列

Stream流本身并不储存数据

Stream流属于管道流,仅可使用一次;二次使用会抛出IllegalStateException: stream has already been operated upon or closed异常

创建流

1.stream方法:创建串行流,即单线程

2.parallelStream方法:创建并行流,即多线程,但线程不安全

需要注意的是,parallelStream方法的源码注释中提到,该方法返回的不一定是并行流,也就是说任务可能均由调用者线程执行

     * @return a possibly parallel {@code Stream} over the elements in this
     * collection
     * @since 1.8

parallelStream方法返回并行流示例:

public class Test {
    public static void main(String[] args){
        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);

        list.parallelStream().forEach((num) -> {
            System.out.println(Thread.currentThread().getName() + " num=" + num);
        });
    }
}

 

若想将流中的数据依次输出,可使用forEachOrdered方法:

常用方法

1.forEach方法:遍历流中的数据

注:若直接调用forEach方法,则调用的是Iterable接口中的forEach方法

public class Test {
    public static void main(String[] args){
        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
        
        list.stream().forEach(System.out::println);
    }
}

 

2.limit方法:返回由前n个数据组成的流

public class Test {
    public static void main(String[] args){
        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);

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

3.filter方法: 返回由符合要求的数据组成的流

public class Test {
    public static void main(String[] args){
        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);

        list.stream().filter(num -> num>=3).forEach(System.out::println);
    }
}

4.map方法: 将操作映射到流中的每一个数据上,返回数据被映射后的流

public class Test {
    public static void main(String[] args){
        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);

        list.stream().map(num -> num+1).forEach(System.out::println);
    }
}

5.sorted方法:将流中的数据进行排序,返回数据排序后的流

public class Test {
    public static void main(String[] args){
        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);

        list.stream().sorted().forEach(System.out::print);
        System.out.println();
        list.stream().sorted(Integer::compareTo).forEach(System.out::print);
        System.out.println();
        list.stream().sorted((num1, num2) -> num2 - num1).forEach(System.out::print);
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值