Java notes (13) -Stream stream

  1. Stream flow
1. Stream流并不是指I/O流
2. Stream流用于解决现有集合类的一些弊端
3. 如果为了处理集合,我们优先考虑for循环,这不是我们的目的,目的只是处理集合,循环只是方式
4. Stream流则是关注做什么(处理集合),而不是怎么做(循环/Stream流)
  1. Use Stream flow optimization
1. for循环:遍历集合找出4个字母的以a开头字符串后输出
    ArrayList<String> arr = new ArrayList<>();
    arr.add("abc");
    arr.add("abcd");
    arr.add("daadcs");
    ArrayList<String> list = new ArrayList<>();
    for(String s : arr){
        if(s.length() == 4 && s.startWith("a"))
            list.add(s);
    }
    for (String s : list)
        sout(s);
2. Stream流优化
    arr.stream()
                .filter(s -> s.startWith("a"))
                .filter(s -> s.length() == 4)
                .forEach(s -> sout(s));
3. 流使用内部迭代方式,不是显示的for循环
  1. Obtaining stream
1. 所有Collection集合(单列,map集合需要先转化为单列)都可以通过stream方法获取流
    List<String> list = new List<>();
    Stream<String> stream = list.stream();
2. 通过Stream接口的成员方法of来获取流
    Stream.of(1,2,3);
    Stream.of(arr);
3. 常用方法:
    a. 逐一处理:forEach
        void forEach(Consumer<? super T> action);
    b. 过滤器:filter
        Stream<T> filter(Predicate<? super T> pre);
    c. 映射方法:map
        R Stream<R> map(Function<? super T, ? extends R> mapper);
    d. 统计流中元素个数:count
        long count();
    e. 截取:limit
        Stream<T> limit(long maxSize);//截取前maxSize个元素
    f. 跳过:skip
        Stream<T> skip(long n);//跳过前n个元素,返回剩下元素的流。全部跳过返回一个空元素流
    g. 组合流:concat
        static <T> Stream<T> concat(Stream<? extends T> a, Stream<? extends T> b);
  1. Method references
1. 双冒号(::)为引用运算符,其所在的表达式被称为方法引用。
2. 如果Lambda要表达的函数方案已经存在某个方法的实现中,那么可以直接通过双冒号来引用该对象的方法代替Lambda
3. 例如:
    printStr(s -> System.out.println(s));//拿到参数后,经Lambda之手,传递给sout
    printStr(System.out::println);//
4. 通过对象引用成员方法:
    对象已经存在
    方法已经存在
    对象::方法
5. super引用方法
6. this引用方法
7. 类的构造器引用
    public static void printName(String name, PersonBuilder p){
        Person person = p.buildPerson(name);
        sout(person.getName());
    }
    psvm{
        printName("test",Person::new);//如果类中构造方法是已知的,则可以直接通过引用new来创建对象
    }
8. 数组构造器引用
    public static void creatArray(int len,ArrayBuilder a){
        return a.builderArray(len)
    }
    int[] arr = creatArray(10,int[]::new);

Guess you like

Origin blog.csdn.net/yy19961124/article/details/98098850
Recommended