美文网首页
2021-03-30什么是Stream

2021-03-30什么是Stream

作者: 卡布奇诺_7828 | 来源:发表于2021-04-02 08:37 被阅读0次

流(Stream)中保存对集合或数组数据的操作。和集合类似,但集合中保存的是数据。
Stream特点
1.Stream 自己不会存储元素。
2.Stream不会改变源对象。相反,他们会返回一个持有结果的新Stream。
3.Stream操作是延迟执行的。这意味着他们会等到需要结果的时候才执行。

Stream使用步骤
1.创建 :新建一个Stream
2.中间操作:在一个或多个步骤中,将初始Stream转化到另一个Stream的中间操作。
3.终止操作:使用一个终止操作来产生一个结果。该操作会强制它之前的延迟操作立即执行。在这之后,该Stream就不能使用了。

创建Stream
1.通过Collection对象的stream()或parallelStream()方法。
2.通过Arrays类的stream()方法
3.通过Stream接口的of()、iterate()、generate()方法。
4.用过IntStream、Long Stream、DoubleStream接口中的of、range、rangeClosed方法。

package text;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Random;
import java.util.stream.IntStream;
import java.util.stream.Stream;

/**
 * Stream的使用
 * @author zdf
 */
public class Demo5Stream {
    public static void main(String[] args) {
        //1.通过Collection对象的stream()或parallelStream()方法。
        ArrayList<String> arrayList = new ArrayList<>();
        arrayList.add("huawei");
        arrayList.add("xiaomi");
        arrayList.add("pingguo");
        Stream<String> stream = arrayList.stream();
        //遍历
//        stream.forEach(s-> System.out.println(s));
        stream.forEach(System.out::println);
//       2.Arrays工具类的Stream方法
        String[] arr={"aaa","bbb","ccc"};
        Stream<String> stream1 = Arrays.stream(arr);
        stream1.forEach(System.out::println);
//        3.Stream接口中的of,iterate,generate方法
        Stream<Integer> of = Stream.of(10,20,30,40);
        of.forEach(System.out::println);
        //迭代流
        Stream<Integer> iterate = Stream.iterate(0, x -> x + 2);
        iterate.limit(10).forEach(System.out::println);
//        生成流
        Stream<Integer> generate = Stream.generate(() -> new Random().nextInt(100));
        generate.limit(10).forEach(System.out::println);
//    4IntStream,LongStream,DoubleStream 的of,range,rangeClosed
        IntStream intStream = IntStream.of(100, 200, 300);
        intStream.forEach(System.out::println);
    }
}

中间操作、终止操作
中间操作
1.filter、limit、skip、distinct、sorted
2.map
3.parallel q

package text;

import java.util.ArrayList;
import java.util.Comparator;

public class Demo6 {
    public static void main(String[] args) {
        ArrayList<Employee> list = new ArrayList<>();
        list.add(new Employee("小王", (double) 15000));
        list.add(new Employee("小李", (double) 20000));
        list.add(new Employee("小张", (double) 18000));
        list.add(new Employee("小孙", (double) 12000));
        list.add(new Employee("小孙", (double) 12000));
//    中间操作1.filter 过滤 2.limit 限制 3. skip 跳过 4.distinct 去重 5. sorted 排序
        //filter 过滤
        list.stream().filter(e->e.getMoney()>(double)15000).forEach(System.out::println);
    //limit 限制
        list.stream().limit(2).forEach(System.out::println);
    //skip跳过
        list.stream().skip(2).forEach(System.out::println);
//        distinct 去重复
        list.stream().distinct().forEach(System.out::println);
//    sorted 排序
        list.stream().sorted(Comparator.comparingDouble(Employee::getMoney)).forEach(System.out::println);
//   中间操作2map
        list.stream().map(e->e.getName()).forEach(System.out::println);
//        中间操作3 parallel 采用多线程效率
        list.parallelStream().forEach(System.out::println);
    }
}

终止操作
1.foreach、 min、max、count
2.reduce、collect

package text;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

public class Demo8 {
    public static void main(String[] args) {
        ArrayList<Employee> list = new ArrayList<>();
        list.add(new Employee("小王", (double) 15000));
        list.add(new Employee("小李", (double) 20000));
        list.add(new Employee("小张", (double) 18000));
        list.add(new Employee("小孙", (double) 12000));
        list.add(new Employee("小孙", (double) 12000));
        //终止操作 foreach
    list.stream().filter(e->e.getMoney()>15000).forEach(System.out::println);
    //终止操作 min max count
        Optional<Employee> min = list.stream().min(Comparator.comparingDouble(Employee::getMoney));
        System.out.println(min.get());
        //终止操作reduce 规约
        //计算所有员工的工资和
        Optional<Double> reduce = list.stream().map(Employee::getMoney).reduce((x, y) -> x + y);
        System.out.println(reduce.get());
        //终止方法collect收集
        //获取所有员工姓名,封装一个list集合
        List<String> collect = list.stream().map(Employee::getName).collect(Collectors.toList());
        for (String string : collect){
            System.out.println(string);
        }
    }
}

相关文章

网友评论

      本文标题:2021-03-30什么是Stream

      本文链接:https://www.haomeiwen.com/subject/tumnhltx.html