java流是什么?

1.java 流是什么?

流是java的api的新成员,它允许你的声明性方式处理数据集合(通过查询语句来表达)而不是临时编写一个实现。

流可以透明地进行并行处理。

之前的java7的代码为

List<Dish> CalDishes = new ArrayList<>();

    for (Dish dish:menu){
        //用累积器进行筛选元素
        if (dish.getCal()<400){
        CalDishes.add(dish);
        }
    }

//用匿名类进行菜品排序
Collections.sort(CalDishes, new Comparator<Dish>(){
    public int compare(Dish dish1,Dish Dish2){
        return Integer.compare(dish1.getCal(),dish2,getCal());
    }

});

//排序后的菜品名称列表
List<String> CalDishesName= new ArrayList<>(){
    for (Dish dish: CalDishes){
        CalDishesName.add(dish.getName());
    }
}

修改为Java8的后的代码

//引入流
import static java.util.Comparator.comparing;
import static java.util.Stream.Collectiors.toList;
List<String> CalDishName= menu.stream()
            .filter(d-> d.getCal<400()
            .sorted(comparing(Dish::getCal))
            .map(Dish::getName)
            .collect(toList));

如果是是多线程的方式,可以考虑用stream() 替换成parallelStream()


java8的代码可以看出的好处,上下一比较,java8的简洁

  • 代码采用声明性方式编写,说明想要完成什么(筛选热量低的菜品)而不是说明如何实现一个操作,利用循环和if条件等控制流语言。可以利用lambda表达式来筛选高卡路里的菜肴。

基本操作链接来,表达复杂的数据处理流水先(filter后面的Sorted,map和Collect操作)是与具体线性模型无关的高层次构件

新版的Stream Api表达能力非常强

如:

Map<Dish.type,List<Dish>> disesByType = menu.stream().collect(groupingBy(Dish:getType));

Java8 的Stream Api的特点:

  • 声明性
  • 可复合
  • 可并行

流的定义

从支持数据处理操作的源生成的元素序列

元素序列:就像集合一样,流提供了一个借口,可以访问特点元素类型的一组有序值

源:流会使用一个提供数据的源,如:集合,数组,I/O资源。

数据操作处理:流的数据处理功能支持类似数据库的操作如:filter,map,reduce,find,match,sort等

流水线:很多流操作可以回归一个流,多个操作可以链接起来,构成一个更大的流水线

内部迭代:与集合使用迭代器进行显示迭代不同,流的迭代操作是在后台进行的。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值