Day10 总结 -Stream流


Day10 - 总结

一、Stream流的常见操作方法

1、Stream流的获取

1.1、单列集合:

  • 格式:集合对象 .stream();
  ArrayList list = new ArrayList<>();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        list.add("ddd");
		//简化前代码
     	Stream stream = list.stream();
        stream.forEach(s -> System.out.println(s));
        //简化后代码
        list.stream().forEach(s-> System.out.println(s));

1.2、双列集合:

双列集合不能直接获取Stream流 需通过 kaySet 或 entrySet来间接获取Stream流
kaySet格式:集合对象.keySet().stream(); //获取到所有的 键 对象

values格式:集合对象.values().stream(); //获取到所有的 值 对象

entrySet格式:集合对象.entrySet().stream(); //获取到所有的 键值对 对象

 HashMap map = new HashMap<>();
        map.put("zhangsan",20);
        map.put("lisi",22);
        map.put("wangwu",24);
        map.put("zhaoliu",26);

        //keySat
        //先获取到所有的键  
		//然后在把这个Set集合中的所有的键放到stream流中
        map.keySet().stream().forEach(s-> System.out.println(s));

		//values
		//先获取到所有的值  
		//然后在把这个Set集合中的所有的值放到stream流中
		map.values().stream().forEach(s-> System.out.println(s));

        //entrySet
        //先获取到所有的键值对对象
        //然后在把这个set的集合中所有的键值对对象放到Stream流中
        map.entrySet().stream().forEach(s-> System.out.println(s));

2、中间操作方法

2.1、filter() 过滤方法

  • Stream filter(Predicate predicate) : 用于对流中的数据进行过滤
    • Predicate 接口中的方法
    • boolean test(T t) : 对给定的参数进行判断,返回一个布尔值
        ArrayList list = new ArrayList<>();
        list.add("张三丰");
        list.add("张无忌");
        list.add("张翠山");
        list.add("王二麻子");
        list.add("谢广坤");
        list.add("张良");

        //filter方法获取流中的每一个数据。
        //而test方法中的是,就是依次表示流中的每一个数据。
        //我们只要 在test方法中对是进行判断就可以了。
        //如果判断的结果为true, 则当前的数据留下
        //如果判断的结果为false,则当前的数据就不要

		// 方法一 使用匿名内部类方法实现 过滤
        list.stream().filter(new Predicate() {
            @Override
            public boolean test(String s) {
                boolean result = s.startsWith("张");
                return result;
            }
        }).forEach(s -> System.out.println(s));

		 // 方法二 使用lambda 表达式 
        // 因为Predicate接口中只有一个抽象的方法test
        // 所以我们可以使用lambda表达式来简化 代码
       list.stream().filter(s -> {
            boolean result = s.startsWith("张");
            return result;
        }).forEach(s -> System.out.println(s));

		// 再一次简化 lambda 表达式
       list.stream().filter(s -> s.startsWith("张")).forEach(s -> System.out.println(s));

相关