• 延迟方法:返回值类型仍然是Stream接口自身类型的方法,因此支持链式调用。(处终结方法外,其余方法均为延迟方法)
  • 终结方法:返回值类型不再是Steam接口自身类型的方法,因此不再支持类似StringBuilder那样的链式调用。本小节中,

         终结方法包括 count 和 forEach 方法。

逐一处理:forEach

虽然方法名字叫 forEach,但是与for循环中的for-each昵称不同

void forEach(Consumer<? super T> action);

复习Consumer接口

java.util.function.Consumer<T>接口是一个消费型接口

Consumer接口中包含抽象方法void accept(T t),意为消费一个指定泛型的数据

/**
 *  Stream流中的方法 forEach:
 *  void forEach(Consumer<? super T> action);
 *  该方法接受一个Consumer接口函数,会将每一个流元素交给函数进行处理。
 *  Consumer接口是一个消费型的函数式接口,可以传递Lambda表达式,消费数据
 *  简单记:
 *      forEach方法,用来遍历流中的数据
 *      是一个终结方法,遍历之后就不能继续调用Stream流中的其他方法
 */
public class Demo3Stream_forEach {
    public static void main(String[] args) {
        // 获取一个Stream流
        Stream<String> stream = Stream.of("张三", "李四", "王五", "赵六");
        // 使用Stream流中的方法forEach对Stream流中的数据进行遍历
        stream.forEach((String name) -> {
            System.out.println(name);
        });
        // 更优写法
        // stream.forEach(name -> System.out.println(name));
    }
}

过滤:filter

可以通过filter方法将一个流转换成另一个子集流。方法签名:

Stream<T> filter(Predicate <? super T> prediate);

该接口接收一个predicate函数式接口参数(可以是一个Lambde或方法引用)作为筛选条件

 

 复习predicate接口

此前我们已经学过java.util.stream.Predicate函数式接口,其中唯一的抽象方法为:

Boolean test(T t);

该方法将会产生一个boolean值结果,代表指定的条件是否满足。如果结果为true,那么Stream流的filter方法将会留用元素;

如果结果为false,那么filter方法将会舍弃元素。

/**
 * stream流中的常用方法_filter:用于对stream流中的数据进行过滤
 * Stream<T> filter(Predicate <? super T> predicate);
 * filter方法的参数Predicate是一个函数式接口,所以可以传递Lambda表达式,对数据进行过滤
 * Predicate中的抽象方法:
 * boolean test(T t);
 */
public class Demo4Stream_filter {
    public static void main(String[] args) {
        // 创建一个Stream流
        Stream<String> stream = Stream.of("张三丰", "张翠山", "赵敏", "周芷若", "张无忌");
        // 对stream流中的元素进行过滤,只要姓张的人
        Stream<String> stream2 =stream.filter((String name) -> {return name.startsWith("张");});
        // 遍历stream2流
        stream2.forEach(name -> System.out.println(name));
    }
}

 

原文地址:http://www.cnblogs.com/shenziyi/p/16801438.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性