【Java】Stream 流详解

Stream流实现与传统方式实现对比

传统方式实现

package com.bohoog.controller;
 
import java.util.ArrayList;
 
public class Aoo {
    public static void main(String[] args) {
        // 1.定义一个集合
        ArrayList<String> list = new ArrayList<>();
        list.add("张三");
        list.add("张");
        list.add("三");
        list.add("张三四");
        list.add("张四");
        // 2.挑选list中包含张三的
        ArrayList<String> list1 = new ArrayList<>();
        for (String s : list) {
            if (s.startsWith("张三")){
                list1.add(s);
            }
        }
        System.out.println("挑选list包含张三的结果:"+list1);
        // 3.再从list1中挑选挑选名字长度为2的
        ArrayList<String> list2 = new ArrayList<>();
        for (String s : list1) {
            if (s.length() == 2){
                list2.add(s);
            }
        }
        System.out.println("挑选list1长度为2的结果:"+list2);
        // 4、遍历
        for (String s : list2) {
            System.out.println("最终结果 = " + s);
        }
    }
}

Stream流方式实现

package com.bohoog.controller;
 
import java.util.ArrayList;
 
public class Boo {
    public static void main(String[] args) {
        // 定义一个集合
        ArrayList<String> list = new ArrayList<>();
        list.add("张三");
        list.add("张");
        list.add("三");
        list.add("张三四");
        list.add("张四");

        //Stream流实现
        list.stream()
                .filter((name) -> name.startsWith("张三"))
                .filter((name) -> name.length()==2)
                .forEach((name) -> System.out.println(name));

    }
}

Stream流的常用API

stream流的获取

  • 在Collection集合下,均有一个stream(),另一个即是用Stream的一个静态方法 of() 实现
package com.bohoog.controller;
 
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Stream;
 
public class Boo {
    public static void main(String[] args) {
        //Collction集合
        Collection<String> collection = new ArrayList();
        Stream<String> stream = collection.stream();
        //List集合
        List<String> list = new ArrayList<>();
        Stream<String> stream1 = list.stream();
        //ArrayList集合
        ArrayList<String> arrayList = new ArrayList<>();
        Stream<String> stream2 = arrayList.stream();
        //LinkedList集合
        LinkedList<String> linkedList = new LinkedList<>();
        Stream<String> stream3 = linkedList.stream();
 
        //of()方式实现
        List<String> list1 = new ArrayList<>();
        Stream<List<String>> stream4 = Stream.of(list1);
        //传入可变数组
        Stream<String> stream5 = Stream.of("1","2","3","4");
    }
}

forEach()

  • 遍历流中的对象
package com.bohoog.controller;
 
import java.util.ArrayList;
 
public class Aoo {
    public static void main(String[] args) {
        // 定义一个集合
        ArrayList<String> list = new ArrayList<>();
        list.add("张三");
        list.add("张");
        list.add("三");
        list.add("张三四");
        list.add("张四");

        //遍历流的对象
        list.stream().forEach((name) -> System.out.println(name));
    }
}

filter()

  • filter对流对象进行过滤
package com.bohoog.controller;

import java.util.ArrayList;

public class Aoo {
    public static void main(String[] args) {
        // 定义一个集合
        ArrayList<String> list = new ArrayList<>();
        list.add("张三");
        list.add("张");
        list.add("三");
        list.add("张三四");
        list.add("张四");

        //过滤流的对象
        list.stream().filter((name) -> name.length()==2);
    }
}

map()

  • 对集合中的对象进行映射的,将对象从一种类型转换成另一种类型
package com.bohoog.controller;

import java.util.ArrayList;

public class Aoo {
    public static void main(String[] args) {
        // 定义一个集合
        ArrayList<String> list = new ArrayList<>();
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");
        list.add("5");
        list.add("6");
        list.add("7");

        //map()是对集合中的对象进行映射的,将对象从一种类型转换成另一种类型
        list.stream().map(num -> Integer.parseInt(num));
    }
}

count()

  • 对流数据统计的方法,但是count之后返回的是long类型,所以无法再进行流操作
package com.bohoog.controller;

import java.util.ArrayList;

public class Aoo {
    public static void main(String[] args) {
        // 定义一个集合
        ArrayList<String> list = new ArrayList<>();
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");
        list.add("5");
        list.add("6");
        list.add("7");

        //count()对流数据进行统计
        System.out.println(list.stream().count());
    }
}

limit()

  • 选取流数据的前多少条数据
package com.bohoog.controller;

import java.util.ArrayList;

public class Aoo {
    public static void main(String[] args) {
        // 定义一个集合
        ArrayList<String> list = new ArrayList<>();
        list.add("李四1");
        list.add("李四2");
        list.add("李四3");
        list.add("李四4");
        list.add("李四5");
        list.add("李四6");
        list.add("李四7");
        //limit() 选取流数据的前多少条数据
        list.stream().limit(2);
    }
}

skip()

  • 跳过流数据的前多少条数据,该方法与limit()方法刚好相反
package com.bohoog.controller;

import java.util.ArrayList;

public class Aoo {
    public static void main(String[] args) {
        // 定义一个集合
        ArrayList<String> list = new ArrayList<>();
        list.add("李四1");
        list.add("李四2");
        list.add("李四3");
        list.add("李四4");
        list.add("李四5");
        list.add("李四6");
        list.add("李四7");
        //skip() 跳过流数据的前多少条数据
        list.stream().skip(2);
    }
}

concat()

  • 实现对两个流数据进行合并
package com.bohoog.controller;

import java.util.ArrayList;
import java.util.stream.Stream;

public class Aoo {
    public static void main(String[] args) {
        // 定义一个集合
        ArrayList<String> list = new ArrayList<>();
        list.add("李四1");
        list.add("李四2");
        list.add("李四3");
        list.add("李四4");
        list.add("李四5");
        list.add("李四6");
        list.add("李四7");
        // 定义一个集合
        ArrayList<String> list1 = new ArrayList<>();
        list1.add("1");
        list1.add("2");
        list1.add("3");
        list1.add("4");
        list1.add("5");
        list1.add("6");
        list1.add("7");
        //concat()实现对两个流数据进行合并
        Stream.concat(list.stream(),list1.stream());
    }
}
posted @ 2022-10-27 16:45  小魁jking  阅读(255)  评论(0编辑  收藏  举报