File size: 32,965 Bytes
1b558aa | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 | 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.
|