登陆

怎么运用JavaStream高效的处理调集数据?函数式编程妙用第二篇

admin 2020-02-14 302人围观 ,发现0个评论

一、Java Stream管道数据处理操作

在本号之前发布的文章《Java Stream函数式编程?用过都说好,事例图文详解送给你》中,笔者对Java Stream的介绍以及简略的运用办法给咱们做了介绍。在开端本文之前,咱们有必要介绍一下这张Java Stream 数据处理进程图,图中首要分三个部分:

  • 将数组、调集类、文本文件转化为管道流(图中的蓝色方块的部分,在本号的上一篇文章中现已给咱们介绍过了)
  • Java Stream管道数据处理操作(也便是下图中中心的虚线内的数据处理操作,本文的首要内容)
  • 管道流处理结果的聚合、累加、计数、转化为调集类等操作(图中的绿色方块部分)

需求留意的是:Java Stream的中心数据处理操作的输入是一个管道流(Stream),输出仍然是一个管道流(Stream)。下面咱们就来具体的学习一下!在上一篇文章中,咱们给咱们讲了这样一个比如:

点击可扩大

这个比如完结的功用便是:首要运用stream()函数将数组转化为管道流;然后对管道流中的元素进行过滤filter(),只保存L最初的元素;然后对每一个元素转化为大写map(String::toUpperCase);然后排序sorted(),终究转化为List类型。

经过处理之后的输出结果是: [LEMUR, LION].在上面的比如中,filter()、map()、sorted()都归于中心数据处理操作,下面就给咱们解说一下这些函数的具体用法。

二、filter管道数据过滤

依据笔者的的经历,filter()是Stream API最有用的操作之一,它能够过滤掉不符合条件的元素。下面的代码过滤掉管道中的不是怎么运用JavaStream高效的处理调集数据?函数式编程妙用第二篇以L最怎么运用JavaStream高效的处理调集数据?函数式编程妙用第二篇初的字符串元素。处理完结之后,管道中剩余的元素是:[Lion, Lemur]

假如没有学过lambda表达式的同学,或许对上面的代码感到困惑。其实很简略,lambda表达式用来表达函数,箭头左边是参数,箭头右侧是函数体。函数的参数类型和回来值类型,会依据上下文做自动化的判别,不必你管。上文中的lambda表达式写成函数是这样的

我乃至见过有的人排怎么运用JavaStream高效的处理调集数据?函数式编程妙用第二篇挤运用lambda表达式,说这种语法使代码的可读性下降。这个怎么说呢,假如一篇专业期刊中包括英语专业名词与引证,而读者恰巧不会英语就不想读了,我神农架天气觉得这不是文章的问题,而是读者的问题。并且lamdba表达式在各种编程言语里边得到广泛的运用,进步编码功率。其实很简略:箭头左边是参数,箭头右侧是函数体,你现已学会了!

三、Limit与Skip管道数据截取

  • limt办法传入一个整数n,用于截取管道中的前n个元素。经过管道处理之后的数据是:[Monkey, Lion]。
  • skip办法与limit办法的运用相反,用于越过前n个元素,截取从n到结尾的元素。经过管道处理之后的数据是: [Giraffe, Lemur]

四、Distinct元素去重

咱们还能够运用distinct办法对管道中的元素去重,涉及到去重就必定涉及到元素之间的比较,distinct办法时调用Object的equals办法进行目标的比较的,假如你有自己的比较规矩,能够重写equals办法。

上面代码去重之后的结果是: ["Monkey", "Lion", "Giraffe", "Lemur"]

五、Sorted排序

默许的情况下,sorted是依照字母的天然次序进行排序。如下榜首段代码的排序结果是:[Giraffe, Lemur, Lion, Monkey],字数按次序G在L前面,L在M前面。榜首位无法区别次序,就比较第二位字母。

有的时分,咱们期望排序的规矩能够自定义,这就需求运用到Compa怎么运用JavaStream高效的处理调集数据?函数式编程妙用第二篇rator。有的朋友这儿或许忘了,能够自行回忆一下java根底的Comparator和Comparable接口。代码是依据字符串的长度排序,排序结果是:[Lion, Lemur, Monkey, Giraffe]

六、Map数据转化处理

map()函数的作用是将管道流中的每一个元素,以某种规矩转化为别的一个元素。下面榜首段代码处理过的管道中的元素为: [monkey, lion, giraffe, lemur],一切元素的字母悉数小写。

map()函数不只能够处理数据,还能够转化数据的类型。如图中第二段代码,处理结果是:[6, 4,怎么运用JavaStream高效的处理调集数据?函数式编程妙用第二篇 7, 5],规矩是字符串的长度。将管道流的字符串,运用mapToInt办法,以String::length为规矩进行转化。

当然除了mapToInt(),还为咱们供给了mapToDouble()和mapToLong()办法。咱们能够经过自定义转化规矩函数,回来int、double、long类型的回来值。

等待您的重视,本号文章只做干货输出

我方案还会再写几篇关于Java Stream的文章,等待您的重视哦!click my 头像进入到my homepage,底栏内更多程序员技能精品合集。

本号只做继续的常识输出,期望您能重视、谈论、转发您的支撑是我不竭的创造动力!让常识发生价值、让程序员改动国际!

请关注微信公众号
微信二维码
不容错过
Powered By Z-BlogPHP