玩转Stream流

为什么要使用Stream流

Stream API 借助于同样新出现的 Lambda 表达式,极大的提高编程效率和程序可读性。同时它提供串行和并行两种模式进行汇聚操作。并发模式能够充分利用多核处理器的优势,使用 fork/join 并行方式来拆分任务和加速处理过程。通常编写并行代码很难而且容易出错, 但使用 Stream API无需编写一行多线程的代码,就可以很方便地写出高性能的并发程序。所以说,Java 8 中首次出现的 java.util.stream 是一个函数式语言+多核时代综合影响的产物。

在Stream流中分为两个操作,中间操作和终端操作,每个操作都有自己对应的方法。接下来给大家上一张图,先暂时看下,后面会说到。
请添加图片描述

代码实践

下面一段代码作为全局的数据来源

@Data
public class Dish {
    //名称
    private  String name;
    //是否可以直接吃
    private  boolean vegetarian;
    //卡路里
    private  int calories;
    //类型
    private  String type;

    public Dish(String name, boolean vegetarian, int calories, String type) {
        this.name = name;
        this.vegetarian = vegetarian;
        this.calories = calories;
        this.type = type;
    }
    public Dish(){};
}
  //构建数据
    public static List<Dish> getDates() {
        List<Dish> menu = Arrays.asList(
                new Dish("猪肉", false, 800, "肉"),
                new Dish("牛肉", false, 700, "肉"),
                new Dish("鸡肉", false, 400, "肉"),
                new Dish("炸薯条", true, 530, "其他"),
                new Dish("米饭", true, 350, "其他"),
                new Dish("时令水果", true, 120, "其他"),
                new Dish("披萨", true, 550, "其他"),
                new Dish("虾", false, 300, "鱼"),
                new Dish("鲑鱼”", false, 450, "鱼"));
        return menu;
    }

Stream工作过程

在这里插入图片描述
在这里插入图片描述
在本例中,我们先是对menu调用stream方法,由菜单得到一个流。数据源是菜肴列表(菜
单),它给流提供一个元素序列。接下来,对流应用一系列数据处理操作:filter、map、limit
和collect。除了collect之外,所有这些操作都会返回另一个流,这样它们就可以接成一条流
水线,于是就可以看作对源的一个查询。最后,collect操作开始处理流水线,并返回结果(它
和别的操作不一样,因为它返回的不是流,在这里是一个List)。在调用collect之前,没有任
何结果产生,实际上根本就没有从menu里选择元素。你可以这么理解:链中的方法调用都在排
队等待,直到调用collect。下图显示了流操作的顺序:filter、map、limit、collect,
每个操作简介如下
在这里插入图片描述

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值