Java8新特性(Stream流)

Stream流是用于对数组和集合进行便捷操作的。

Stream流

学习Stream流的步骤:获取Stream流,Stream流常见的中间方法,Stream流常见的终结方法。

Stream流的创建

  1. 获取数组的Stream流:Arrays.stream(arr)
  2. 获取List集合的Stream流:list.stream(  )
  3. 获取Set集合的Stream流:hashSet.stream( )
  4. 获取Map集合的Stream流:
    Set> entries = hashMap.entrySet();
    Stream> stream2 = entries.stream();

Stream流中间方法

中间方法指的是调用完流之后其结果是一个新的流,还可以继续调用方法,这样一来就可以支持链式编程。

调用中间方法时,一定要连续调用,否则会抛出IllegalStateException异常

常用的中间方法

Java8新特性(Stream流)_第1张图片

peek方法不改变流的元素,只是对流中的元素进行操作,然后将流传递给下一个动作。

peek是惰性的,只有在最终操作(forEach,collect,count等)被调用时才会执行。

Stream终结方法

 Java8新特性(Stream流)_第2张图片

 Java8新特性(Stream流)_第3张图片

终结方法不能连续调用,因为此时流已经关闭。 

 Collectors.toList( ):将Stream流中的元素累计到一个List集合中然后返回

Collectors.toSet( ):将Stream流中的元素累计到一个Set集合中然后返回

流的应用案例

案例需求:有一个List集合,元素有 " 张三丰 "," 张无忌 "," 周芷若 "," 赵敏 "," 张强 " ,找出姓张,且是3个字的名 字,存入到一个新集合中去。
 public static void main(String[] args) {
        List names = new ArrayList<>();
        Collections.addAll(names,"张无忌","张三丰","周芷若","张强","赵敏");
        System.out.println(names);
        //找到所有姓张的,且只有三个字
       List threeName = new ArrayList<>();
       names.forEach(s -> {
           if(s.startsWith("张") && s.length() == 3){
               threeName.add(s);
           }
       });
        System.out.println(threeName);

        HashSet hashSet = new HashSet<>();
        //List集合的stream流
        Stream stream = names.stream();
        //Sset集合的stream流
        Stream stream1 = hashSet.stream();
        HashMap hashMap = new HashMap<>();
        //Map集合的stream流,需要用存放键值对的entrySet
        Set> entries = hashMap.entrySet();
        Stream> stream2 = entries.stream();
        String[] strings = {"1","2","3","4"};
        //数组获取流的方法
        Stream stream3 = Arrays.stream(strings);
        stream3.filter(new Predicate() {
            @Override
            public boolean test(String s) {
                //s是stream流里面的元素
                System.out.println(s);
                return s.startsWith("张") && s.length() == 3;
            }
        });
        //stream是获取的流对象,filter中间添加了过滤条件,collect终结方法,流式编程(链式编程)
        Set set = stream.filter(s -> s.startsWith("张") && s.length() == 3).collect(Collectors.toSet());
        System.out.println(set);
    }

你可能感兴趣的:(linux,运维,服务器)