Lambdas
(a, b) -> a.compareTo(b)
(переменные) -> действие
Tama na sa ngayon. Maaari mong basahin ang teorya dito: link one , link two , ngunit sa tingin ko ang pagsasanay ay mas masaya. Iminumungkahi kong lutasin mo ang sumusunod na problema: Sumulat ng calculator gamit ang paraan 1. Ang pamamaraan ay dapat tumanggap ng 2 digital na halaga at iba pa. Magiging ganito ang hitsura ng iyong code:
class Lambda{
public static void main (String[] args) {
}
public static double calculate(){
return null;
}
}
Kailangan mong magpasok ng 3 mga parameter sa lagda ng pamamaraan calculate
, magdagdag ng 1 utos sa return
at subukan ang pagtawag sa paraang ito sa main
. Ano ang dapat gawin ng pamamaraang ito?
- tiklop;
- magparami;
- hatiin;
- ibawas;
- kalkulahin ang ugat;
- itaas sa isang kapangyarihan;
- itaas sa isang kapangyarihan ang kabuuan ng mga argumento na hinati sa unang numero + 117;
- at lahat ng iba pang operasyon na maiisip mo.
if-else
;char
bilang tagapagpahiwatig ng operasyon;switch-case
;- at lahat ng bagay na pumapasok sa iyong isipan.
- Mga lambda lang, nasa kanila ang gawain.
![Lambdas at stream, practice lang, walang theory - 3](https://cdn.javarush.com/images/article/229db17e-518b-4e20-a9ed-e216ddd0f96d/1024.jpeg)
inputStream
at hindi ito OutputStream
. Iba ito, mas kawili-wili. Ang mga stream ay pinalitan ang mga cycle, hindi ganap, ngunit pa rin. Binigyan sila ng motto na "huwag ipaliwanag kung paano ito gagawin, ipaliwanag kung ano ang gagawin." Isang maliit na halimbawa ng isang stream:
List<String> myList = Arrays.asList("a1", "a2", "b1", "c2", "c1");
myList.stream()
.filter(s -> s.startsWith("c"))
.map(String::toUpperCase)
.sorted()
.forEach(System.out::println);
Anong nangyayari dito? Magdagdag tayo ng mga komento:
myList.stream() // получить поток
.filter(s -> s.startsWith("c")) //отфильтровать значения, оставить те, что начинаются с «с»
.map(String::toUpperCase) // преобразовать все значения, перевести в верхний регистр
.sorted() // отсортировать по порядку (дефолтный порядо)
.forEach(System.out::println); // вывести каждый элемент на экран
Ihambing sa isang regular na loop:
List<String> toSort = new ArrayList<>();
for(String s : myList){
if(s.startsWith("c")){
toSort.add(s.toUpperCase());
}
}
Collections.sort(toSort);
for(String s : toSort){
System.ouy.println(s);
}
Kapag binasa mo ang code, ang lahat ay mukhang nakakatakot, ngunit mas madali ba ito sa mga komento? Ito ay normal, hindi ko rin sila naiintindihan nang mahabang panahon. Ang susi sa pag-unawa ay pagsasanay. Samakatuwid, nagsisimula kaming magbasa ng mga artikulo ng third-party at maghanap ng mga sagot sa aming mga katanungan, maaari mo ring tanungin ang mga ito dito sa mga komento, hindi ako magbibigay ng buong sagot, ngunit ituturo ko ang direksyon. Listahan ng mga gawain mula sa JavaRush na sa tingin ko ay mahusay para sa pagsasanay ng streaming:
-
2208 - maaaring malutas sa 1 stream at 1 return, i.e. ang katawan ng pamamaraan ay magsisimula sa
return
at pagkatapos ay magkakaroon ng 1 buong stream. Alisin natin ang kinakailanganStringBuilder
. -
1908 - maaari mo ring lutasin ito sa 1 stream at 1 return. Simula sa pagbabasa ng file. Hindi ko alam kung paano mag-record sa isang file sa pamamagitan ng mga stream (kung posible ito), sa ngayon ay ginagawa namin ito nang manu-mano. Yung. Nagbubukas lang kami ng 2 stream (console at pagsusulat sa isang file). Binabasa namin ang file sa pamamagitan ng mga pamamaraan na magbabalik sa amin ng alinman sa isang sheet o isang stream (google at javadoc).
-
1907 - sa teorya, maaari din itong malutas sa isang stream. Ang input sa stream ay ang pangalan ng file, ang output ay ang bilang ng mga salita sa mundo.
-
1016 - sa isang bahagyang baluktot na paraan, maaari mong lutasin ito sa 1 stream at 1 pagbabalik;
-
1821 - napakadali at sa 1 stream at 1 pagbabalik.
Ang 2 gawaing ito ay magpapakilala sa iyo sa isa pang paraan ng streaming at isa pang kolektor.
-
1925 - maaari kang makakuha ng isang linya na may mga salita sa isang stream at pagkatapos ay isulat ito sa isang file (Hindi ko alam kung posible na magsulat sa isang file mula sa isang stream)
GO TO FULL VERSION