java流是什么?

1.java 流是什么?

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

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

之前的java7的代码为

List CalDishes = new ArrayList<>();

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

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

});

//排序后的菜品名称列表
List 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 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> disesByType = menu.stream().collect(groupingBy(Dish:getType));

Java8 的Stream Api的特点:

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

流的定义

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

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

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

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

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

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

 

 

你可能感兴趣的:(spring实践大全)