前言:

stream流式处理方式后,我们可以不用对集合进行遍历可以直接操作集合得到我们想要的结果,在这里看一个小例子:

stream方式的两种写法

public class Dermo01Strema {

    public static void main(String[] args) {

        List<String> list = new ArrayList<String>();
        list.add("逝清雪");
        list.add("莫问");


        /**
         * 传统方式
         */
        for(String s: list){
            if(null != s && s.length() == 3){
                System.out.println(s);
            }
        }

        /**
         * strema方式
         */
        list.stream().filter(s -> null != s).filter(s -> s.length() == 3).forEach(System.out::println);

    }
}

stream和lambda一样都是延迟执行,性能上要高效一些。

一、获取stream的方式

stream()方法获取到了集合流,从而调用java为我们提供Strema接口中的方法,那么我们要想使用stream流,就必须先获取,关于获取stream流的方式则有以下两种。

stream():

stream()方法,注:Map并不是Collection字接口,所以不能像Collection集合那样直接.stream()方式获取

  3、数组:Arrays.stream方法、或者是Stream.of方法

public class Dermo01Strema {

    public static void main(String[] args) {

        List<String> list1 = new ArrayList<String>();
        Stream<String> stremaList = list1.stream();


        Map<String, Integer> map = new HashMap<String, Integer>();
        Stream<String> mapStream2 = map.keySet().stream();
        Stream<Integer> mapStream3 = map.values().stream();
        Stream<Map.Entry<String, Integer>> mapStream1 = map.entrySet().stream();


        String[] array = {"", ""};

        Stream<String> arrayStream1 = Arrays.stream(array);
        Stream<String> arrayStream2 = Stream.of(array);

二、stream中常用的方法

  1、条件过滤:filter

  2、统计个数:counrt

  3、截取集合中的前几个元素:limit

  4、抛弃集合中的前几个元素:skip

  5、合并集合:concat

注:forEach并不是for循环

public class Dermo01Strema {

    public static void main(String[] args) {

        List<String> list1 = new ArrayList<String>();
        list1.add("莫问");
        list1.add("逝清雪");
        list1.add("王母娘娘");
        list1.add("玉皇大帝");
        list1.add("");


        //filter方法
        list1.stream().filter(s -> null != s).filter(s -> s.length() == 3).forEach(System.out::println);

        //count方法
        System.out.println("count方法执行-------------");
        System.out.println(list1.stream().count());

        //limit方法
        System.out.println("limit方法执行-------------");
        list1.stream().limit(2).forEach(System.out::println);

        //skip方法
        System.out.println("skip方法执行-------------");
        list1.stream().skip(2).forEach(System.out::println);

        //concat方法
        System.out.println("concat方法执行-------------");
        List<String> list2 = new ArrayList<String>();
        list2.add("");
        list2.add("宫崎骏");
        Stream.concat(list1.stream(),list2.stream()).forEach(System.out::println);
    }
}

三、将stream流转换成集合的方式

  1、转List集合:stream.collect(Collectors.toList()):

stream.collect(Collectors.toSet()):

stream.toArray(泛型),注:推荐第二种,因为可以直接指定转换后数组的泛型

public class Dermo01Strema {

    public static void main(String[] args) {

        List<String> list1 = new ArrayList<String>();
        Stream<String> stremaList = list1.stream();

        List<String> list12 = stremaList.collect(Collectors.toList());
        Set<String> set = stremaList.collect(Collectors.toSet());



        String[] array = {"", ""};
        Stream<String> arrayStream1 = Arrays.stream(array);

        String[] arry = arrayStream1.toArray(String[]::new);
    }
}

四、stream获取并发流

  1、直接获取:.parallelStream()

  2、间接获取:stream.parallel()

public class Dermo01Strema {

    public static void main(String[] args) {

        List<String> list1 = new ArrayList<String>();

        Stream<String> strema1 = list1.stream().parallel();
        Stream<String> strema2 = list1.parallelStream();
    }
}