stream(流的使用)

/**
* 创建流
*
1.of() 由Stream的静态方法of()创建: Stream stream = Stream.of(“Lambda”, “Java8”, “JavaWeb”, “javaEE”);
* 2.由数组创建流 由Arrays的静态方法stream()创建 String[] words = {“Hello”, “World”}; Arrays.stream(words)
* 3.由文件生成流 通过Files的lines()方法,会将每一行都转化称为stream
* 4.由函数生成流:创建无限流(流没有结尾)
*
* 使用流
*
* 一.筛选和切片
1.筛选(filter方法) 即我们之前的过滤,参数是一个谓词Predicate,
并且返回所有复合谓词判断的元素的流
2.去重 distinct()
3.截短流 limit()
4.跳过元素 skip()

  • 二.映射()
    1.map() 它会接受一个函数作为参数。这个函数会被应用到每个元素上,并将其映射成一个新的元素
    2.floatMap() 把流中的每个值都转换成另一个流,然后把所有的流连接起来称为一个流

    *三.查找与匹配

    • 查看数据集中的某些元素是否匹配一个给定的属性

    • 主要有以下几个API: allMatch、anyMatch、noneMatch、findFirst和findAny
      1.allMatch 检查是否匹配所有元素
      2.anyMatch 检查至少匹配一个元素
      3.noneMathch 代表流中没有任何元素与给定的条件匹配
      4.findFirst 查找第一个元素
      Optional findFirst()返回描述此流的第一个元素的Optional如果流为空,
      则返回一个空的Optional 。
      如果流没有遇到顺序,则可能会返回任何元素。
      5.findAny 将返回当前流中的任意元素,随机

    • 四.归约
      1.元素求和 reduce
      2.最大和最小 max() and min()

- 案例

package IO.stream;
import org.junit.Before;
import org.junit.Test;

import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * User: 彭家琪
 * Date: 2019/9/16   15:19
 */
public class StreamDemo {

    private List<java8.Employee> employees = new ArrayList<>(6);

    @Before
    public void before() {

        employees.add(new Employee(0001, "张三", 26, 6500, 822));
        employees.add(new Employee(0002, "李四", 29, 8500, 881));
        employees.add(new Employee(0003, "王五", 24, 3500, 839));
        employees.add(new Employee(0004, "赵六", 32, 11300, 803));
        employees.add(new Employee(0005, "胡七", 32, 13100, 946));
        employees.add(new Employee(0006, "刘八", 28, 7500, 866`在这里插入代码片`));
    }

 

    /**
     * 创建流
     *
     *      1.of()  由Stream的静态方法of()创建: Stream<String> stream = Stream.of("Lambda", "Java8", "JavaWeb", "javaEE");
     *      2.由数组创建流    由Arrays的静态方法stream()创建    String[] words = {"Hello", "World"};    Arrays.stream(words)
     *      3.由文件生成流   通过Files的lines()方法,会将每一行都转化称为stream
     *      4.由函数生成流:创建无限流(流没有结尾)
     *
     * 使用流
     *
     * 一.筛选和切片
            1.筛选(filter方法) 即我们之前的过滤,参数是一个谓词Predicate,
                并且返回所有复合谓词判断的元素的流
                例如: 上述简单案例,筛选出年龄小于30的员工
            2.去重 distinct()
            3.截短流 limit()
            4.跳过元素 skip()

     * 二.映射()
            1.map() 它会接受一个函数作为参数。这个函数会被应用到每个元素上,并将其映射成一个新的元素
            2.floatMap()  把流中的每个值都转换成另一个流,然后把所有的流连接起来称为一个流


     *三.查找与匹配
     *     查看数据集中的某些元素是否匹配一个给定的属性
     *     主要有以下几个API: allMatch、anyMatch、noneMatch、findFirst和findAny
            1.allMatch 检查是否匹配所有元素
            2.anyMatch 检查至少匹配一个元素
            3.noneMathch  代表流中没有任何元素与给定的条件匹配
            4.findFirst 查找第一个元素
                 Optional<T> findFirst()返回描述此流的第一个元素的Optional如果流为空,
                 则返回一个空的Optional 。
                 如果流没有遇到顺序,则可能会返回任何元素。
            5.findAny 将返回当前流中的任意元素,随机


     * 四.归约
            1.元素求和 reduce
            2.最大和最小 max() and  min()



     */

    //去重
    @Test
    private void test2() {
        List<Integer> num = Arrays.asList(1, 2, 3, 2, 4, 2, 4, 5);
        num.stream().filter(i -> i % 2 != 0).distinct().forEach(System.out::println);
    }
    //映射
    @Test
    public void maptest3() {
        List<String> result = employees.stream().map(employee -> employee.getName()).collect(Collectors.toList());
        System.out.println(result);

        //1.映射称为新的集合,集合内容为原集合元素的字符串长度
        //2.映射称为新的集合,集合内容为原集合元素的字符串的大写

        List<String> lis = Arrays.asList("Lambda", "java8", "javaWeb","javaEE");
        lis.stream().map(e->e.length()).collect(Collectors.toList()).forEach(System.out::println);//1
        lis.stream().map(e->e.toUpperCase()).collect(Collectors.toList()).forEach(System.out::println);//2
    }
    @Test
    public void findtest4() {
        System.out.println(employees.stream().allMatch(employee -> employee.getAge() < 30 && employee.getAge() > 25));

        System.out.println(employees.stream().anyMatch(employee -> employee.getAge() < 30));

        System.out.println(employees.stream().noneMatch(employee -> employee.getAge() > 30));

        Optional<java8.Employee> first = employees.stream().filter(employee -> employee.getAge() < 30).findFirst();
        System.out.println(first);


    }


    @Test
    public void gytest5() {
        List<Integer> i = Arrays.asList(1,3,5,7,9,11,13,15,17,19,21);
        System.out.println(i.stream().reduce(0, (x, y) -> x + y));

        Optional<Double> sum = employees.stream().map(employee -> employee.getSalary()).reduce((a, b) -> a + b);
        System.out.println("sum: "+sum);
        //  System.out.println(employees.stream().map(employee -> employee.getSalary()).reduce(Double::sum ));

        Integer max = i.stream().reduce(0,(a, b) -> a > b ?  a : b );
        System.out.println("最高: "+max);

  // employees.stream().sorted((e1,e2)->e1.getAge() - e2.getAge()).forEach(System.out::println);
   employees.stream().sorted(Comparator.comparingInt(java8.Employee::getAge)).forEach(System.out::println);

    }

    @Test
    public void random(){
        Stream.generate(Math::random) .limit(5) .forEach(System.out::println);
    }


}

package java8;

/**
 * User: 彭家琪
 * Date: 2019/9/11   11:33
 */
public class Employee {

    private int id;
    private String name;
    private int age;
    private double salary;
    private int workHoursForYears;

    public Employee() {

    }



    public void setId(int id) {
        this.id = id;
    }

    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;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    @Override
    public String toString() {
        return "Employee{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", salary=" + salary +
                ", workHoursForYears=" + workHoursForYears +
                '}';
    }

    public int getId() {
        return id;
    }

    public int getWorkHoursForYears() {
        return workHoursForYears;
    }

    public void setWorkHoursForYears(int workHoursForYears) {
        this.workHoursForYears = workHoursForYears;
    }

    public Employee(int id, String name, int age, double salary, int workHoursForYears) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.salary = salary;
        this.workHoursForYears = workHoursForYears;
    }
}

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章