A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1.Stream流相比较传统的代码写法,哪些地方做了优化?
2.Stream流中延迟方法有哪些,终结方法有哪些,使用了终结方法之后会怎样?
3.什么情况下可以使用方法的引用优化lambda表达式?

3 个回复

倒序浏览
1.Stream流相比较传统的代码写法,哪些地方做了优化?
(1)元素遍历优化:遍历代码简洁,直接调用方法完成元素的遍历+操作(可链式编程);
         使用内部迭代,对元素的操作方法通过lambda表达式传递给对应的方法,在元素遍历的给每个元素执行该方法;
(2)性能优化:支持并行操作数据流。
2.Stream流中延迟方法有哪些,终结方法有哪些,使用了终结方法之后会怎样?
(1)常用的延迟方法
        1)filter:对流中的元素以指定的规则进行遍历,产生一个新流;
        2)map:对流中的数据进行指定规则转换,产生一个新流;
        3)concat:将两个流合并为一个新流;
        4)limit:取指定的前n个元素,产生一个新流;
        5)skip:跳过指定的前n个元素,产生一个新流;
(2)常用终结方法
        1)forEach:对元素进行遍历;
        2)count:遍历的元素个数;
(3)使用终结方法后,该流结束,无法再使用;
3.什么情况下可以使用方法的引用优化lambda表达式?
(1)lambda表达式的方法已经存在于某个对象的方法中;
(2)lambda表达式仅调用一个已存在方法;
回复 使用道具 举报 1 0
1.Stream流相比较传统的代码写法,哪些地方做了优化?
答:当需要对多个元素进行操作(特别是多步操作)的时候,我们首先拼好一个 “函数模型”,调用指定方法的时候,可以从一个流模型转换为另一个流模型。集合元素并没有真正被处理。只有当终结方法执行的时候,整个模型才会按照指定策略执行操作,这得益于Lambda的延时特性。
Stream操作还有两个基础的特征:
Pipelining: Stream 就如同一个迭代器(Iterator),单向,不可往复。而和迭代器又不同的是,Stream 可以并行化操作,迭代器只能命令式地、串行化操作。当使用串行方式去遍历时,每个 item 读完后再读下一个 item。而使用并行去遍历时,数据会被分成多个段,其中每一个都在不同的线程中处理,然后将结果一起输出。中间操作都会返回流对象本身。这样做可以对操作进行优化,比如延迟执行和短路。
内部迭代:Stream提供了内部迭代的方式,流可以直接调用遍历方法。通过stream方法创建Stream, Stream 不是集合元素,它不是数据结构并不保存数据,它是有关算法和计算的,它更像一个高级版本的 Iterator,但该方法不是返回一个控制迭代的 Iterator 对象,而是返回内部迭代中的相应接口:Stream,其一系列的操作都是在操作Stream,直到foreach时才会操作结果,这种迭代方式称为内部迭代。
2.Stream流中延迟方法有哪些,终结方法有哪些,使用了终结方法之后会怎样?
答:延迟方法有:filter,map,skip,filter,limit,concat,
终结方法:count,forEach,
使用终结方法完成对数据集中元素的处理。
3.什么情况下可以使用方法的引用优化lambda表达式?
如果Lambda要表达的函数方案已经存在于某个方法的实现中,那么则可以通过双冒号来引用该方法作为Lambda的替代者。
回复 使用道具 举报

1.Stream流相比较传统的代码写法,哪些地方做了优化?
(1)简化了代码量,没有冗余的传统代码;
(2)Stream流可以使用lambda,简化了代码量;
(3)Stream流许多方法都可以返回自己本身,可以在使用lambad时,使用链式编程,进一步减少了代码量.
(4)有延迟性,传统代码内(如在方法的参数进行计算时,传统方法不管有没有调用方法都会把方法的参数进行计算),stream流方法filter、map、skip等只是对函数模型进行操作,集合元素并没有被处理,减少了传统代码上不必要的计算从而导致资源浪费.
2.Stream流中延迟方法有哪些,终结方法有哪些,使用了终结方法之后会怎样?
(1)延迟方法: filter(过滤器,用于对数据进行筛选)、map(映射,用于类型转换)、skip(跳过前几个)、limit(只要前几个)、concat(静态方法,合并两个流为一个集合);
(2)终结方法: forEach(消费型接口,用于消费数据)、count(返回一个int值);
(3)将不能再通过链式编程或者Stream对象返回自己本身.
3.什么情况下可以使用方法的引用优化lambda表达式?
(1)先借助一个函数式接口,通过接口使用lambda表达式,在表达式内使用一个(类/对象)中的一个方法时,可以使用方法引用
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马