java-development-for-beginners-learnit / 23 - Stream API /001 Stream API with Practical Exercises_en.srt
Tan115's picture
Add files using upload-large-folder tool
1b558aa verified
Raw
History Blame Contribute Delete
33 kB
1
00:00:05,000 --> 00:00:10,000
I know there are students in this class and we're going to discuss topics that will help to make your
2
00:00:10,000 --> 00:00:13,000
code clean and concise while working with collections in the race.
3
00:00:14,000 --> 00:00:19,000
They will talk about Stream API at the beginning of the lesson, will give an answer what stream API
4
00:00:19,000 --> 00:00:20,000
is.
5
00:00:20,000 --> 00:00:26,000
I will explain to you why we need to use three API with race and collection sometimes after this class
6
00:00:26,000 --> 00:00:31,000
and you will understand what the conveyor belt is and what terminal and non terminal operations are.
7
00:00:32,000 --> 00:00:37,000
You are going to learn how to create stream and how to process elements with the help of Stream API.
8
00:00:37,000 --> 00:00:40,000
I'm going to show you really a lot of examples today.
9
00:00:40,000 --> 00:00:46,000
I will teach you how to create a stream from array and how to convert at to map with the help of Stream
10
00:00:46,000 --> 00:00:46,000
API.
11
00:00:46,000 --> 00:00:52,000
In this lesson, we are going to have a lot of practice because one of the ways to understand this topic
12
00:00:52,000 --> 00:00:56,000
better is to understand how you can apply this knowledge on practice.
13
00:00:56,000 --> 00:01:01,000
Let's start and to start with, let's create a definition of stream API.
14
00:01:02,000 --> 00:01:07,000
If we would open official documentation from Oracle for Jayaweera to Stream Package will see that this
15
00:01:07,000 --> 00:01:14,000
package contains classes to support functional style operations on streams of elements such as mass
16
00:01:14,000 --> 00:01:16,000
produced transformations, onco actions.
17
00:01:17,000 --> 00:01:22,000
I believe for people who didn't work with streams, this definition doesn't bring a lot of clarity.
18
00:01:22,000 --> 00:01:24,000
So let me explain you the same.
19
00:01:24,000 --> 00:01:31,000
In more simple words, stream application programming interface is a set of interfaces that allow to
20
00:01:31,000 --> 00:01:37,000
process elements and to perform operations with them in containers and arrays with the help of functional
21
00:01:37,000 --> 00:01:38,000
interfaces.
22
00:01:39,000 --> 00:01:45,000
So to perform operation on the group of elements, you can create lambda functions or use Macit references
23
00:01:45,000 --> 00:01:49,000
that in turn significantly simplifies your code.
24
00:01:49,000 --> 00:01:50,000
Does it make sense?
25
00:01:51,000 --> 00:01:56,000
Now let me perform an overview of one important interface from Jowett Ustream package.
26
00:01:56,000 --> 00:02:00,000
This will help you to understand our practice examples.
27
00:02:00,000 --> 00:02:05,000
I would say that one of the most important interfaces is stream interface.
28
00:02:05,000 --> 00:02:11,000
What it is for string interface represents a sequence of elements supporting sequential and parallel
29
00:02:11,000 --> 00:02:13,000
aggregate operations.
30
00:02:13,000 --> 00:02:15,000
This is hard to understand.
31
00:02:15,000 --> 00:02:17,000
Believe me, I know what you feel.
32
00:02:17,000 --> 00:02:24,000
Usually I ask my students to imagine conveyor belt and on this conveyor you have elements from your
33
00:02:24,000 --> 00:02:31,000
collection and as a conveyor belt rolling, you take each element from it and perform any modifications
34
00:02:31,000 --> 00:02:32,000
with it.
35
00:02:33,000 --> 00:02:38,000
Before we dive deeper to code examples, I want you to understand, at least on a high level, the next
36
00:02:38,000 --> 00:02:39,000
example.
37
00:02:39,000 --> 00:02:46,000
Imagine that you have a list of products and you have a task to keep on that products that has more
38
00:02:46,000 --> 00:02:53,000
than one thousand items in the warehouse and decrease price for these products on 10 percent.
39
00:02:53,000 --> 00:02:59,000
This business logic should change the price for products, and this in turn should motivate customers
40
00:02:59,000 --> 00:03:03,000
of the online store to buy these products while price is reduced.
41
00:03:04,000 --> 00:03:05,000
How would you do that?
42
00:03:05,000 --> 00:03:08,000
You would create the container of products.
43
00:03:08,000 --> 00:03:14,000
Let's imagine that this is a box that is full of products and put all products on conveyor belt.
44
00:03:14,000 --> 00:03:19,000
After that, you will check what products has more than one thousand items in warehouse.
45
00:03:20,000 --> 00:03:24,000
You will remove from Canberra products that you are not interested in.
46
00:03:24,000 --> 00:03:29,000
That means you have to apply a function that knows how to filter elements.
47
00:03:29,000 --> 00:03:32,000
After that, you will modify price for each product.
48
00:03:33,000 --> 00:03:40,000
That means you have to apply functions that modify state of the product and only after that the end
49
00:03:40,000 --> 00:03:44,000
of the conveyor belt, you would gather all elements together back to the box.
50
00:03:45,000 --> 00:03:52,000
Is it clear now you can understand that the functions that was applied for each element on the conveyor
51
00:03:52,000 --> 00:03:55,000
belt, they are called non terminal also.
52
00:03:55,000 --> 00:04:02,000
They might be called intermediate functions or it would be opportunism, conveyor operations and the
53
00:04:02,000 --> 00:04:06,000
mass that terminate conveyor are called terminal operations.
54
00:04:07,000 --> 00:04:15,000
We also can say that each non terminal operation at Listener to the Stream listener modifies the element
55
00:04:15,000 --> 00:04:17,000
and pass it to another listener.
56
00:04:17,000 --> 00:04:22,000
This is called stream processing terminal and non terminal operations.
57
00:04:22,000 --> 00:04:24,000
Create Stream Pipeline.
58
00:04:24,000 --> 00:04:31,000
Stream Pipeline consists of the source that is our collection of elements or array followed by intermediate
59
00:04:31,000 --> 00:04:34,000
operations and ended with terminal operation.
60
00:04:35,000 --> 00:04:37,000
Let's consider another case.
61
00:04:37,000 --> 00:04:39,000
You may have multiple lists of products.
62
00:04:39,000 --> 00:04:40,000
How it can be.
63
00:04:41,000 --> 00:04:48,000
You have different warehouses and each warehouse contains information about the products there.
64
00:04:48,000 --> 00:04:52,000
So you have multiple lists of products from each warehouse.
65
00:04:53,000 --> 00:04:59,000
This may happen when Demand-Driven design of your application declares that you have type warehouse
66
00:04:59,000 --> 00:05:01,000
that in turn can return list of products.
67
00:05:02,000 --> 00:05:08,000
And imagine that you have a list, our houses in our example, you have a lot of their houses with products
68
00:05:09,000 --> 00:05:15,000
we can create, can aware of their houses, but we can also have the functions that would tell how to
69
00:05:15,000 --> 00:05:20,000
extract products from these warehouses to have conveyor of products.
70
00:05:20,000 --> 00:05:25,000
And after that, we are going to have similar to previous example, logic will filter elements and will
71
00:05:25,000 --> 00:05:28,000
perform price modification, I believe.
72
00:05:28,000 --> 00:05:31,000
Now you understand what we are going to learn today.
73
00:05:32,000 --> 00:05:37,000
We're going to learn terminal and not terminal functions to perform operations with elements in streams.
74
00:05:38,000 --> 00:05:42,000
Now, let's look at the good examples that I prepared for this lesson.
75
00:05:42,000 --> 00:05:49,000
To understand how streams work will start from reproducing the case that you saw on slides.
76
00:05:49,000 --> 00:05:56,000
All classes are stored in one file to keep all examples related to this lesson grouped and to not switch
77
00:05:56,000 --> 00:05:58,000
between the different types during the lesson.
78
00:05:58,000 --> 00:06:03,000
Here we have a class in its price name and the amount of items in their house.
79
00:06:04,000 --> 00:06:10,000
Also, you can see a special constructor getters and setters to string Masset for the bag and purposes.
80
00:06:11,000 --> 00:06:15,000
And here you can see a warehouse type for the sake of our next examples.
81
00:06:15,000 --> 00:06:18,000
This class has only one field list of products.
82
00:06:19,000 --> 00:06:24,000
Also, there are two masses, getter and setter, to retrieve and to set products accordingly.
83
00:06:25,000 --> 00:06:27,000
Now imagine that I have a list of products.
84
00:06:27,000 --> 00:06:34,000
You can see that I created multiple different products here and put all of them into the list to create
85
00:06:34,000 --> 00:06:34,000
stream.
86
00:06:34,000 --> 00:06:40,000
From this list, I have to just go through Method Stream is the default method in collection interface.
87
00:06:41,000 --> 00:06:44,000
So all collections have be method.
88
00:06:44,000 --> 00:06:49,000
After we create a stream we can call intermediate operations and at least inners.
89
00:06:49,000 --> 00:06:54,000
For example, let's reproduce a situation from the slides that we saw at the beginning of our lesson
90
00:06:55,000 --> 00:06:56,000
I call filter method.
91
00:06:57,000 --> 00:06:58,000
Let me open the source code of Feltham.
92
00:06:58,000 --> 00:07:06,000
As you can see, that filter method takes predicate all intermediate functions, return the stream objects
93
00:07:06,000 --> 00:07:10,000
that allows us to create a chain of MassArt in locations.
94
00:07:10,000 --> 00:07:16,000
Filter message returns a stream consisting of the elements of the stream that match the given predicate.
95
00:07:17,000 --> 00:07:23,000
That means in case predicates returns true for some element, we should keep this element in the stream.
96
00:07:24,000 --> 00:07:26,000
Let's get back to the demo file.
97
00:07:26,000 --> 00:07:28,000
We use simple predicate here.
98
00:07:29,000 --> 00:07:35,000
We want to keep on our conveyor belt only products that have more than 1000 items in the warehouse.
99
00:07:36,000 --> 00:07:39,000
After that, I want to apply function to each element.
100
00:07:40,000 --> 00:07:42,000
I use math method for this.
101
00:07:42,000 --> 00:07:45,000
Let me open the source code of math, Macit.
102
00:07:46,000 --> 00:07:52,000
This message returns a stream consisting of the results of a the given function to the aliments in the
103
00:07:52,000 --> 00:07:52,000
stream.
104
00:07:53,000 --> 00:07:59,000
In our particular case, we modify product and we return the same product to the stream we set.
105
00:07:59,000 --> 00:08:02,000
The new price set is ten percent less than the original.
106
00:08:02,000 --> 00:08:07,000
One important thing to know here is that intermediate operations are lazy.
107
00:08:08,000 --> 00:08:14,000
This means that they will be invoked only if it is necessary for the terminal operation execution.
108
00:08:14,000 --> 00:08:21,000
Let's give you the understanding that this lambda functions will be executed only in case a terminal
109
00:08:21,000 --> 00:08:23,000
operation and the end of the chain.
110
00:08:23,000 --> 00:08:29,000
And now when I did everything I wanted, I want to create a collection of items that are currently on
111
00:08:29,000 --> 00:08:32,000
the conveyor belt I call terminal function collect.
112
00:08:33,000 --> 00:08:36,000
Let's review the source code of collect Macit here.
113
00:08:36,000 --> 00:08:39,000
We can see that this massive tax collector as an argument.
114
00:08:40,000 --> 00:08:41,000
But what is a collector?
115
00:08:42,000 --> 00:08:45,000
We have only one way to learn this from the source code.
116
00:08:45,000 --> 00:08:52,000
We can understand that collector is a specific type that accumulates input elements into mutable result
117
00:08:52,000 --> 00:08:53,000
content.
118
00:08:54,000 --> 00:08:56,000
But where to get the implementation of collector?
119
00:08:57,000 --> 00:09:01,000
Usually engineers use collectors glass to get any collector that is needed.
120
00:09:02,000 --> 00:09:08,000
Let me show you the source code of collectors glass this glass also from Jemmett Ustream package.
121
00:09:08,000 --> 00:09:13,000
And in the Masset outline you can see that we can get different collectors.
122
00:09:13,000 --> 00:09:20,000
The most popular, in my opinion, are the ones that are returned by the next masses to least to set
123
00:09:20,000 --> 00:09:21,000
the map.
124
00:09:21,000 --> 00:09:26,000
Also, you can get collectors that will collect all your elements to modify modifiable least.
125
00:09:26,000 --> 00:09:30,000
For example, most of the masses are describing here.
126
00:09:30,000 --> 00:09:34,000
That's why I don't see the sense into naming all of this matter.
127
00:09:35,000 --> 00:09:40,000
Just open the source code of this class to investigate what other collectors you can use.
128
00:09:40,000 --> 00:09:47,000
By the way, at the end of the lesson, I will leave a cheat sheet for you where I will gather all the
129
00:09:47,000 --> 00:09:50,000
most popular masses, including the terminal functions.
130
00:09:51,000 --> 00:09:53,000
Let's get back to our demo file.
131
00:09:53,000 --> 00:09:58,000
In this case, I want to group all elements from my stream into the container.
132
00:09:58,000 --> 00:10:01,000
I call collect method and pass collect the.
133
00:10:01,000 --> 00:10:10,000
Is it a might the least Masset implication, is this example clear so you can see massive change here
134
00:10:10,000 --> 00:10:14,000
with multiple intermediate functions and then I have one terminal operation.
135
00:10:15,000 --> 00:10:17,000
Where did they get these intermediate masses?
136
00:10:18,000 --> 00:10:20,000
You can open string type to investigate.
137
00:10:20,000 --> 00:10:24,000
The rest of the masses here will review these in a minute.
138
00:10:24,000 --> 00:10:26,000
Let me finish the example we already started.
139
00:10:27,000 --> 00:10:29,000
Let me get back to the demo file.
140
00:10:30,000 --> 00:10:35,000
And after I created the list, I want to print all elements to console from the new line.
141
00:10:35,000 --> 00:10:40,000
But instead of creating foreach loop, I will use the feature of Stream API.
142
00:10:40,000 --> 00:10:43,000
I create a stream using the variable of modified products.
143
00:10:44,000 --> 00:10:51,000
After that, I call for each method that takes consumer as an argument and I pass mast reference here
144
00:10:51,000 --> 00:10:54,000
out property of a system class.
145
00:10:54,000 --> 00:10:59,000
His method printer lan that we use very often during the bargain of our programs.
146
00:10:59,000 --> 00:11:05,000
So I just use reference to this massive let me run the program to prove you that it works.
147
00:11:05,000 --> 00:11:07,000
And here we go.
148
00:11:07,000 --> 00:11:11,000
You can see that I have only three products with modified price.
149
00:11:11,000 --> 00:11:12,000
Awesome.
150
00:11:12,000 --> 00:11:14,000
Everything works as expected.
151
00:11:15,000 --> 00:11:19,000
Now let me reproduce the second example from our presentation.
152
00:11:19,000 --> 00:11:22,000
Imagine that we have multiple warehouses.
153
00:11:22,000 --> 00:11:25,000
I create a few warehouses, objects here.
154
00:11:25,000 --> 00:11:27,000
Each warehouse has lists of products.
155
00:11:28,000 --> 00:11:32,000
That's why I add a different list of objects to the warehouses here.
156
00:11:33,000 --> 00:11:39,000
And imagine we have to iterate over all products to decrease price only for products that have more
157
00:11:39,000 --> 00:11:41,000
than 1000 items.
158
00:11:41,000 --> 00:11:46,000
First of all, I group all my warehouse objects into one list.
159
00:11:46,000 --> 00:11:49,000
Now I create a stream out of this list.
160
00:11:49,000 --> 00:11:52,000
After that I call flat my math.
161
00:11:53,000 --> 00:11:54,000
What is it for?
162
00:11:54,000 --> 00:12:02,000
This method exists to extract elements from NASA once this method will return stream consistent of the
163
00:12:02,000 --> 00:12:09,000
result of replacing each element of the stream with the contents of a mapped stream produced by applying
164
00:12:09,000 --> 00:12:13,000
the provided map and function to each element.
165
00:12:13,000 --> 00:12:22,000
Is it clear will path function to this method that will produce stream of elements from each element?
166
00:12:22,000 --> 00:12:29,000
In our particular case, we have to get products from each warehouse object and create a stream on list
167
00:12:29,000 --> 00:12:30,000
of products.
168
00:12:30,000 --> 00:12:38,000
Before we call this flat map method, we have conveyor belt of warehouse elements and after we called
169
00:12:38,000 --> 00:12:41,000
flat map, we have stream of product elements.
170
00:12:41,000 --> 00:12:46,000
Can you understand now how we can transform data in our stream?
171
00:12:46,000 --> 00:12:51,000
After that, we are filtering and applying function to all elements.
172
00:12:51,000 --> 00:12:53,000
Now let me show you one more thing.
173
00:12:54,000 --> 00:13:00,000
Imagine that according to some massive contracts requirements, you have to reach an array we can call
174
00:13:00,000 --> 00:13:02,000
to array Massud instead of collect.
175
00:13:03,000 --> 00:13:07,000
But in case we would just call Thouret Array method, we would get array of objects.
176
00:13:08,000 --> 00:13:14,000
What to do in this case, I have to pass the Massud that will create array of the specific types that
177
00:13:14,000 --> 00:13:15,000
I need.
178
00:13:15,000 --> 00:13:19,000
What method can create an array of product constructor?
179
00:13:20,000 --> 00:13:28,000
That's why I specify type here array of product and positive reference to a constructor according to
180
00:13:28,000 --> 00:13:29,000
syntax requirements.
181
00:13:29,000 --> 00:13:31,000
I have to write the new keyword here.
182
00:13:32,000 --> 00:13:34,000
Can you understand now what this meant?
183
00:13:35,000 --> 00:13:38,000
Now Java can create object of product array.
184
00:13:39,000 --> 00:13:43,000
After that I want to print all elements to console from new line.
185
00:13:44,000 --> 00:13:48,000
But we have an array this time can create stream from array.
186
00:13:48,000 --> 00:13:49,000
Yes I can.
187
00:13:50,000 --> 00:13:54,000
I have to call stream Massud from arrays class and parse array of products there.
188
00:13:55,000 --> 00:13:59,000
That's how easily you can create three from any array.
189
00:13:59,000 --> 00:14:06,000
Also during the discussion of functional interfaces, I promise to show you one method and how it might
190
00:14:06,000 --> 00:14:07,000
be helpful.
191
00:14:07,000 --> 00:14:12,000
While working with Stream API, I'm talking about identity Masset from function type.
192
00:14:13,000 --> 00:14:19,000
Imagine that you want to convert list of products to the map type where you're going to have product
193
00:14:19,000 --> 00:14:23,000
name as a key and product type as a value that is mapped to this key.
194
00:14:24,000 --> 00:14:25,000
How to do that.
195
00:14:25,000 --> 00:14:30,000
You'll remember at the beginning of the lesson I created products placed in this example.
196
00:14:30,000 --> 00:14:35,000
I use the same list of products, I create stream code, collect method.
197
00:14:35,000 --> 00:14:40,000
And after that I called to map Masset from collectors' class and past two functions.
198
00:14:41,000 --> 00:14:47,000
The first one should create keys, and the second one is a function that can create product values that
199
00:14:47,000 --> 00:14:49,000
are associated with a specific case.
200
00:14:50,000 --> 00:14:56,000
Taking into account, I don't need to modify a product, I should return the same product.
201
00:14:56,000 --> 00:15:00,000
That's why I use identity MASSATA function type here.
202
00:15:00,000 --> 00:15:08,000
Identity MassArt returns the same object, does it make sense, the last good example that I want to
203
00:15:08,000 --> 00:15:15,000
share with you is map to end and some that I would even say that a group of mass that you will use and
204
00:15:15,000 --> 00:15:17,000
these two are just one of many.
205
00:15:18,000 --> 00:15:23,000
There are numerous of business cases when they need to process collection of elements and find is a
206
00:15:23,000 --> 00:15:28,000
max price or some old values of some field or something similar.
207
00:15:29,000 --> 00:15:35,000
To perform these operations, we have to convert our regular stream to in stream or double stream along
208
00:15:35,000 --> 00:15:36,000
stream.
209
00:15:36,000 --> 00:15:44,000
That's why Stream Type has such masses as map to end, map to double mapped along this massive stage
210
00:15:44,000 --> 00:15:52,000
function as an argument then can extract some no value out of current item in stream and these masses
211
00:15:52,000 --> 00:15:56,000
rich on specific stream type like any stream that will stream along stream.
212
00:15:57,000 --> 00:15:59,000
These types declare new methods.
213
00:16:00,000 --> 00:16:06,000
For example, imagine the case when you need to calculate total amount of items of all products in the
214
00:16:06,000 --> 00:16:08,000
warehouse aggregate stream.
215
00:16:08,000 --> 00:16:14,000
And after that cool map to Inmarsat and parse function that returns into value based on each product,
216
00:16:15,000 --> 00:16:16,000
is that clear?
217
00:16:17,000 --> 00:16:20,000
And after that I can call some method.
218
00:16:20,000 --> 00:16:27,000
This mass at will sum all integers in my end stream that I received after map to Inmarsat invocation.
219
00:16:28,000 --> 00:16:35,000
And here I bring the total items amount to consult, by the way, instead of some you can call Max mean
220
00:16:35,000 --> 00:16:38,000
average or any other methods you would like.
221
00:16:38,000 --> 00:16:45,000
Myside examples from this file, I also prepared a lot of other examples for you, which are the masses,
222
00:16:45,000 --> 00:16:48,000
I believe, linked to this file in attachment to this lesson.
223
00:16:49,000 --> 00:16:54,000
I want you to investigate these good examples by yourself after the lesson, because technical is a
224
00:16:54,000 --> 00:16:56,000
syntax is the same.
225
00:16:56,000 --> 00:16:58,000
And you saw already a few examples.
226
00:16:58,000 --> 00:17:01,000
Some of the methods are used very rare.
227
00:17:01,000 --> 00:17:03,000
Some of them are used more often.
228
00:17:03,000 --> 00:17:06,000
We'll talk about the masses in a minute.
229
00:17:06,000 --> 00:17:12,000
But remember that you can find any good example with any message from Stream API by searching through
230
00:17:12,000 --> 00:17:12,000
this file.
231
00:17:13,000 --> 00:17:19,000
Now, when you saw how you can use the masses and stream API, it is only a matter of what that you
232
00:17:19,000 --> 00:17:20,000
want to call.
233
00:17:20,000 --> 00:17:24,000
We cover all aspects of using stream API from the syntax standpoint.
234
00:17:24,000 --> 00:17:29,000
Now we have to learn the masses that you might want to use while working with streams.
235
00:17:30,000 --> 00:17:32,000
I want to show you a cheat sheet, I call it.
236
00:17:32,000 --> 00:17:37,000
So was the main operations with streams and shared examples.
237
00:17:37,000 --> 00:17:42,000
Remember, you can use a cheat sheet in case you forgot something on this slide.
238
00:17:42,000 --> 00:17:45,000
You can see how you can create a stream with examples.
239
00:17:45,000 --> 00:17:47,000
Some of them we already reviewed.
240
00:17:47,000 --> 00:17:50,000
I'm talking about creating a stream from collections and from array.
241
00:17:51,000 --> 00:17:52,000
Let's review other options.
242
00:17:53,000 --> 00:17:56,000
We can create stream of elements if we want.
243
00:17:56,000 --> 00:17:59,000
We can create stream of lines in case we read file.
244
00:18:00,000 --> 00:18:02,000
We will learn more about this during the topic.
245
00:18:02,000 --> 00:18:04,000
Input output streams in Java.
246
00:18:05,000 --> 00:18:08,000
Also, as you can see here, we can create a stream from stream.
247
00:18:08,000 --> 00:18:11,000
We can use Stream Builder to add elements.
248
00:18:11,000 --> 00:18:18,000
And after that stream also you can invoke parallel stream that would process all elements in different
249
00:18:18,000 --> 00:18:20,000
threats of execution.
250
00:18:20,000 --> 00:18:26,000
Ensured parallel stream will not always bring you better performance because coordination of multiple
251
00:18:26,000 --> 00:18:30,000
threats of execution also requires some calculations.
252
00:18:30,000 --> 00:18:35,000
That's why use parallel stream only with the amount of data.
253
00:18:35,000 --> 00:18:41,000
It is hard to see what should be considered as Beke because it will depend on the operations you are
254
00:18:41,000 --> 00:18:43,000
going to perform and stream.
255
00:18:43,000 --> 00:18:49,000
It will also depends on the type of the object that you are going to use and how big it is.
256
00:18:49,000 --> 00:18:56,000
I would even say that in case you are not sure whether the parallel stream in some particular case always
257
00:18:56,000 --> 00:18:58,000
opt for regular stream in such cases.
258
00:18:59,000 --> 00:19:05,000
Also, we can create infinite sequential order stream produced by iterative application of a function
259
00:19:05,000 --> 00:19:07,000
to an initial element.
260
00:19:08,000 --> 00:19:14,000
Besides that, we can create an infinite sequential stream where each element is generated by the provided
261
00:19:14,000 --> 00:19:14,000
supply.
262
00:19:15,000 --> 00:19:19,000
In other words, we can pass a function that can generate elements and create a stream.
263
00:19:20,000 --> 00:19:24,000
To be honest, I didn't use the last two options very often.
264
00:19:24,000 --> 00:19:28,000
So now you know all possible ways to create stream.
265
00:19:28,000 --> 00:19:29,000
Let's move on.
266
00:19:30,000 --> 00:19:33,000
On this slide, you can see different intermediate methods.
267
00:19:33,000 --> 00:19:38,000
Some of them looks familiar to you because we had examples with those masses.
268
00:19:38,000 --> 00:19:45,000
You already know when you might want to use filter, map, map to end flatman methods, don't you?
269
00:19:45,000 --> 00:19:52,000
You also can use skip method to skip specific number of elements you can call distant Masad to get stream
270
00:19:52,000 --> 00:19:59,000
without duplication in case you want to apply consumer function to each element you can call peak MassArt.
271
00:19:59,000 --> 00:20:05,000
Usually it is used for debugging purposes, the print element to console to investigate the state of
272
00:20:05,000 --> 00:20:07,000
a stream lamet.
273
00:20:07,000 --> 00:20:11,000
Masset allows you to limit the number of elements in your stream source.
274
00:20:12,000 --> 00:20:16,000
It allows us to source elements in stream by natural ordering.
275
00:20:16,000 --> 00:20:22,000
There is also overloaded version of this method that takes Comparator as an argument to define the source
276
00:20:22,000 --> 00:20:23,000
and order.
277
00:20:23,000 --> 00:20:28,000
Using these intermediate operations, you can do amazing things with data manipulation.
278
00:20:29,000 --> 00:20:35,000
Let's look at the next slide and on this slide you can find a list of terminal operations.
279
00:20:35,000 --> 00:20:42,000
Today during the demo, you saw collect Masset for each entero find first method returns, the first
280
00:20:42,000 --> 00:20:43,000
element from stream.
281
00:20:43,000 --> 00:20:49,000
This might be useful in case your source elements in stream and want to take the first elements after
282
00:20:49,000 --> 00:20:57,000
sorting, find any MACIT returns, any element from stream patterns that these two methods return object
283
00:20:57,000 --> 00:20:58,000
of type optional.
284
00:20:58,000 --> 00:21:05,000
This is not the lesson about optional, but ensured optional is a type that is used as a container for
285
00:21:05,000 --> 00:21:10,000
objects that may or may not contain and nonono value.
286
00:21:10,000 --> 00:21:17,000
Also, these types introduce API to extract value from container or perform as operations in case a
287
00:21:17,000 --> 00:21:18,000
container is empty.
288
00:21:19,000 --> 00:21:27,000
We can call Count Massud in case we want to get a number of elements in this stream and any match non-match
289
00:21:27,000 --> 00:21:30,000
and all march methods take predicate to return.
290
00:21:30,000 --> 00:21:31,000
True or false?
291
00:21:32,000 --> 00:21:38,000
I believe that it is clear from the method names that any match will return true in case at least one.
292
00:21:38,000 --> 00:21:45,000
The elements from streamy, the conditions of predicates that we passed to this massive non-match will
293
00:21:45,000 --> 00:21:52,000
return true in case non of elements Margitza Predicate and all March will return true only in case all
294
00:21:52,000 --> 00:21:56,000
elements march pre-cut main and maximizers.
295
00:21:56,000 --> 00:22:03,000
I believe these are self describing this massive state comparator as an argument for each order.
296
00:22:03,000 --> 00:22:09,000
It must is similar to for each Massett, but it also supports order of elements in the stream.
297
00:22:10,000 --> 00:22:16,000
Reduce mass performs reduction stream operations that allows us to produce one single result from a
298
00:22:16,000 --> 00:22:21,000
sequence of elements in this operation usually take part three participants.
299
00:22:21,000 --> 00:22:23,000
They are a regional element.
300
00:22:24,000 --> 00:22:26,000
It is also called identity.
301
00:22:26,000 --> 00:22:29,000
The second participant is an accumulator.
302
00:22:29,000 --> 00:22:36,000
This is a function that takes two parameters, a partial result of the reduction operation and the next
303
00:22:36,000 --> 00:22:37,000
element of the string.
304
00:22:37,000 --> 00:22:40,000
And the third participant is a combiner.
305
00:22:40,000 --> 00:22:46,000
This is a function that is used to combine the partial result of the reduction operation once the reduction
306
00:22:46,000 --> 00:22:52,000
is paralyzed or when there is a mismatch between the types of the accumulator arguments and the types
307
00:22:52,000 --> 00:22:54,000
of the accumulator implementation.
308
00:22:55,000 --> 00:23:01,000
And I know that this can sound not clear, but don't worry about that after this lesson.
309
00:23:01,000 --> 00:23:03,000
Take your time to investigate the examples.
310
00:23:04,000 --> 00:23:10,000
I didn't show you this example because to be honest, this function is not used super often, really.
311
00:23:11,000 --> 00:23:16,000
So take your time to investigate examples and feel free to ask questions in case you have any.
312
00:23:17,000 --> 00:23:19,000
That's all what I wanted to share with you today.
313
00:23:19,000 --> 00:23:24,000
Now let's recap what we have learned today so that we learned really a lot of things.
314
00:23:25,000 --> 00:23:26,000
But let's try to sum it up.
315
00:23:27,000 --> 00:23:30,000
We understand what Stream API is now.
316
00:23:30,000 --> 00:23:36,000
We know how to create stream, how to use intermediate operations and how to use terminal operations
317
00:23:37,000 --> 00:23:38,000
on real life examples.
318
00:23:38,000 --> 00:23:41,000
You saw how you can apply your knowledge about Stream API.
319
00:23:41,000 --> 00:23:47,000
Also, you got a lot of examples that you can use during the development when you need.
320
00:23:47,000 --> 00:23:49,000
And now let me show your homework.
321
00:23:50,000 --> 00:23:52,000
You can find multiple tasks here.
322
00:23:53,000 --> 00:23:59,000
The important thing in each task is to implement those with the help of Stream API and functional interfaces.
323
00:24:00,000 --> 00:24:06,000
You can practice a lot in writing your own lambda expressions and then processing elements in stream
324
00:24:06,000 --> 00:24:08,000
read tasks attentively.
325
00:24:08,000 --> 00:24:15,000
I edit as much details as I could in each task and remember, in case you have any question gunshy to
326
00:24:15,000 --> 00:24:17,000
ask me that.
327
00:24:17,000 --> 00:24:20,000
So what I have for you for today, thanks a lot for your attention.
328
00:24:20,000 --> 00:24:23,000
Have a great day and see you in the next lesson.