当前位置: 首页 > 科技观察

Java8中StreamAPI的这些技巧和窍门!你们都拿到了吗?

时间:2023-03-14 21:54:57 科技观察

Stream简介1.Java8引入了新的StreamAPI。这里的Stream不同于I/O流,它更像是一个带有Iterable的集合类,只是行为与集合类不同。2.Stream是对集合对象功能的增强。它专注于对集合对象进行各种非常方便和高效的聚合操作,或者大规模的数据操作。3、只要指定需要对其包含的元素进行哪些操作,比如“过滤掉长度大于10的字符串”、“获取每个字符串的首字母”等,Stream就会隐式遍历在内部,做相应的数据转换。为什么要用Stream1,函数式编程的好处特别明显。这段代码更多地表达了业务逻辑的意图,而不是其实现机制。可读代码也更易于维护、更可靠且不易出错。2.高端实例数据源Filter1,在遍历数据,检查其中的元素时使用。2.过滤器接受一个函数作为参数,用Lambda表达式表示。Map1,map生成一对一的映射,作用为2,比较常用3,而且很简单FlatMap1,顾名思义,和map类似,更深层次的操作2,但是还是有区别的3,map和flat返回不同的值4.Map的每个输入元素都按照规则转换为另一个元素。还有一些场景是一对多的映射关系,这时候就需要flatMap。5.Map一对一6.Flatmap一对多7.map和flatMap的方法声明不同(1)Streammap(Functionmapper);(2)StreamflatMap(Function>mapper);(3)map和flatMap的区别:个人认为flatMap可以处理更深层次的数据。输入参数是多个列表,结果可以列表返回,而map是一对一的。输入参数为多个列表,返回结果必须为多个列表。通俗地说,如果输入参数都是对象,那么flatMap可以对对象内部的对象进行操作,而map只能对顶层进行操作。减少1。感觉和递归差不多。2.数字(字符串)的累加。)5.CustomOptional1,Optional是为核心类库新设计的一种数据类型,用于替换空值。2.人们对原始空值有很多抱怨,甚至发明这个概念的TonyHoare也是如此。他曾表示,这是他自己犯下的“宝贵错误”。3.很有用,不仅在lambda中可以用在任何地方4.Optional.of(T),T是非空的,否则会报初始化错误5.Optional.ofNullable(T),T是任意的,可以为空6.isPresent(),相当于!=null7,ifPresent(T),T可以是lambda表达式,或者其他代码,如果不为空,则并发1,将stream替换为parallelStream或parallel2,大小为输入流并不是决定并行化是否会带来速度提升的唯一因素,性能也会受到代码编写方式和内核数量的影响3.影响性能的五个要素是:数据大小,源数据结构体,值是否装箱,可用的CPU核数,处理每个元素的时间调试1.list.map.fiter.map.xx是链式调用,最后调用collect(xx)返回result2.分为lazyevaluation和earlyevaluation3.判断是否很简单一个操作是惰性评估还是早期评估:只看它的返回值。如果返回值是一个Stream,那么就是惰性求值;如果返回值是另一个值或为空,则为急切求值。使用这些操作的理想方式是形成一个懒惰的评估链,最后使用一个早期的评估操作来返回想要的结果。4.通过peek,可以查看各个值,同时继续操作流