Streams首次引入Java8是在2014年。所以,他们现在大约5岁了。然而,我们中的许多人仍然难以正确理解和解释数据流。对于一些人来说,这只是一种遍历列表的新方式,而另一些人则认为它只是减少了我们需要编写的代码量。虽然这些说法没有错,但它们高度低估了流的力量。今天我们将学习溪流,你可以在厨房里找到几样东西,比如水龙头,一些水,……。
打开水龙头,水就开始流动了。各位,你们有一条小溪,那条水就是你们的数据。流都是关于推送给您的数据。而不是你去看数据(就像从井里提桶里的水),数据本身就会来找你。为了从技术上跟踪事情,我们还将使用字符串流,它将在代码中表示我们的流。
//表示含有某些杂质的水流的字符串流。Stream<;String>;water=Stream.of(";water";,";杂质";,";杂质";,";水";);//水,杂质,杂质,水。
水龙头里的水被认为不适合直接饮用,因为它含有杂质,就像有时我们不想让某些东西成为我们数据的一部分一样。而且,这是当过滤器(类似净水器)进入,去除任何我们不想要的东西的时候。
Stream<;String>;water=Stream.of(";water&34;,";杂质&34;,";杂质&34;,";water&34;);//水,杂质,杂质,水//让&/让&/过滤掉杂质Stream<;String&>;Purewater=water。filter(w-&>;!w.equals(";杂质";);//水,水。
我们是脆弱的生物,除去水中的杂质对我们来说是不够的。我们还需要注入RO&和其他矿物质的水,对吗?在现实生活中,我们的净水器通常会做所有这些事情,但为了我们的示例,我们将其视为一个不同的操作,一个地图操作。
Stream<;String>;water=Stream.of(";water";,";杂质";,";杂质";,";water";);Stream<;String>;Purewater=water。filter(w->;!w.equals(";杂质";));//水,水//让';s添加一些矿物质Stream<;string>;roWater=pureWater.map(w-&>;#34;ro&34;+w);//rowater,rowater。
这里需要记住的一件非常重要的事情是,映射是1对1的操作。1对1运算意味着一个输入产生一个输出。因为在这里,每一股水都被转化为一股流水。
当你让水通过喷头时会发生什么?是的,它已经分解成小滴了。而且,这正是Flat Map对您的数据所做的事情。
与映射不同的是,它是一对多的操作,即它为一个输入生成多个输出。
Stream<;String>;water=Stream.of(";water";,";杂质";,";杂质";,";water";);Stream<;String>;Purewater=water。filter(w-&>;!w.equals(";杂质";));//water,water Stream<;Character&>Dropets=pureWater.flat Map(w-&>;w.chars().mapToObj(d-&>;(Char)d));//water().mapToObj(d-&>;(Char)d);//water water water。
现在,想想看。你会打开水龙头、净水器或洒水器吗?除非你需要水来储存、做饭或喝水。不,对。如果你没有一个具体的目标,那么做整个过程是没有意义的。这正是Java的想法,因此它选择让流保持惰性。您在上面看到的所有代码都不会做任何事情,除非您有特定的目的,也就是我们称之为终端操作的东西。
在我们的整个厨房,水龙头,水的情况下,你认为码头的运营会是什么?把水收集到玻璃杯里(记住,我说过你也需要一个玻璃杯)。所以,除非你想要一杯水,否则你不会打开任何东西。
与MAP不同,Flat Map&;Filter没有名为TERMINAL的操作。但是,诸如Collect、forEach等各种操作被认为是终端操作。
Stream<;String>;water=Stream.of(";water";,";杂质";,";杂质";,";water";);Stream<;String>;Purewater=water。filter(w-&>;!w.equals(";杂质";));//water,water Stream<;string>;roWater=pureWater.map(w->;";ro&34;+w);//rowater,rowaterList<;string>;glassOfWater=roWater.Collect(Collectors.toList());//将开始.。
在上面的代码中,Streams water、Purewater&;roWater将仅在以下情况下执行。
因为那是我们的终点站行动而被处决,