[log]java8实战流操作基本概念

package com.dudu.java8.read;

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 第二部分 函数式数据处理
 *  4 引入流
 * @create: 20190327
 * @author: liu
 **/

public class Read4 {

    public static void main(String[] args) {
        /**
         * 允许以声明性方式处理数据集合
         * 还可以透明的进行并行处理
         *
         *
         * @create: 2019-03-27 
         * @author: liu
        **/

        List<String>  dogs= Arrays.asList(new Dog("a",12),new Dog("c",5),new Dog("s",8), new Dog("q",2))
                .stream()
                .filter(x -> x.getAge() >3)
                .sorted(Comparator.comparing(Dog::getAge))
                .map(Dog::getName)
                .collect(Collectors.toList());

        //还可以使用group进行分组
        System.out.println(dogs);

        /**
         * 代码以声明性方式写:说明想要完成什么,而不是说明如何实现
         * 可以把几个基础操作连接起来,表达复杂的数据处理流水线
         * 其他的类库 guava   lamdbaj
         *
         *  流简介
         *  从支持数据处理操作的源生成的元素序列
         *  元素序列:
         *      像集合一样,流也提供了一个接口,可以访问特定元素类型的一组有序值
         *  源:
         *      流会使用一个提供数据的源,如集合、数组或输入、输出资源。有序集合生成流时会保留原有的顺序
         *  数据处理操作:
         *      流的数据处理功能支持类似于数据库的操作,以及函数式编程语言中的常用操作
         *  流水线:
         *  内部迭代:
         *
         *  常见的流操作简介
         *  filter  接收lambda 进行筛选操作
         *  map     进行信息的提取
         *  limit   截断,进行一部分的数据截取
         *  collect 将流转换为其他形式
         *
         * @create: 2019-03-27
         * @author: liu
        **/

        /**
         *  流和集合提供了接口,来配合代表元素型有序值的数据接口,一般是按顺序取用值
         *  集合和流之间的差异就在于什么时候进行计算,
         *  集合是内存中的数据结构
         *  流在概念上固定的数据结构,不能添加或删除元素,元素是按需计算的
         *  流只能遍历一次
         *  @create: 2019-03-27
         *  @author: liu
        **/

        /**
         *  外部迭代与内部迭代
         *  使用Collection接口需要用户去做迭代,foreach等 称为外部迭代
         *  Streams库使用内部迭代,帮你做迭代
         *
         *  内部迭代时,项目可以透明地并行处理
         *  foreach需要自己处理并行的问题
         *
         *  流操作
         *  可以连接起来的流操作称为中间操作,关闭流的操作称为终端操作
         *
         *  中间操作会返回另一个流,,除非流水线触发一个终端操作,否则中间操作不回执行任何处理
         *
         *  尽管filter 和map是两个独立的操作,但是他们合并到同一次遍历中,这种技术,叫做循环合并
         *
         *
         *  使用流:
         *      一个数据源来执行一个查询
         *      一个中间操作链,形成一条流的流水线
         *      一个终端操作,执行流水线,并能生成结果
         *  @create: 2019-03-27
         *  @author: liu
        **/

    }

}


class Dog {
    private  String name ;
    private  int age ;

    public Dog(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/java_sparrow/article/details/88855525
今日推荐