API zavirivanja Java 8 Streams ()
1. Uvod
API Java Stream uvodi nas u moćnu alternativu za obradu podataka.
U ovom kratkom vodiču usredotočit ćemo se na zaviriti (), često pogrešno shvaćena metoda.
2. Brzi primjer
Uprljajmo ruke i pokušajmo koristiti zaviriti (). Imamo tok imena i želimo ih ispisati na konzolu.
Od zaviriti () očekuje a Potrošač kao jedini argument čini se da se dobro uklapa, pa probajmo:
Stream nameStream = Stream.of ("Alice", "Bob", "Chuck"); nameStream.peek (System.out :: println);
Međutim, gornji isječak ne daje izlaz. Da bismo razumjeli zašto, napravimo kratko osvježavanje aspekata životnog ciklusa streama.
3. Srednje i terminalne operacije
Podsjetimo da tokovi imaju tri dijela: izvor podataka, nula ili više posrednih operacija i nula ili jedan terminal.
Izvor daje elemente cjevovodu.
Posredničke operacije dobivaju elemente jedan po jedan i obrađuju ih. Sve su srednje operacije lijene i kao rezultat toga, nikakve operacije neće imati učinka dok cjevovod ne počne raditi.
Terminalske operacije znače kraj životnog ciklusa toka. Što je najvažnije za naš scenarij, oni inicirati radove u cjevovodu.
4. zaviriti () Upotreba
Razlog zaviriti () nije uspjelo u našem prvom primjeru je to to je srednji i nismo primijenili a terminal operacija do cjevovoda. Alternativno, mogli smo koristiti za svakoga() istim argumentom za postizanje željenog ponašanja:
Stream nameStream = Stream.of ("Alice", "Bob", "Chuck"); nameStream.forEach (System.out :: println);
zaviriti ()"Javadoc stranica kaže:"Ova metoda postoji uglavnom za podršku ispravljanju pogrešaka, gdje želite vidjeti elemente kako prolaze kroz određenu točku cjevovoda“.
Razmotrimo ovaj isječak s iste Javadoc stranice:
Stream.of ("one", "two", "three", "four") .filter (e -> e.length ()> 3) .peek (e -> System.out.println ("Filtrirana vrijednost: "+ e)) .map (String :: toUpperCase) .peek (e -> System.out.println (" Mapirana vrijednost: "+ e)) .collect (Collectors.toList ());
Pokazuje kako promatramo elemente koji su prošli svaku operaciju.
Na vrhu toga, zaviriti () može biti korisno u drugom scenariju: kada želimo izmijeniti unutarnje stanje elementa. Na primjer, recimo da želimo pretvoriti sva korisnička imena u mala slova prije nego što ih ispišemo:
Stream userStream = Stream.of (novi korisnik ("Alice"), novi korisnik ("Bob"), novi korisnik ("Chuck")); userStream.peek (u -> u.setName (u.getName (). toLowerCase ())) .forEach (System.out :: println);
Alternativno, mogli smo koristiti karta(), ali zaviriti () je prikladnije jer ne želimo zamijeniti element.
5. Zaključak
U ovom kratkom vodiču vidjeli smo sažetak životnog ciklusa streama kako bismo razumjeli kako zaviriti () djela. Također smo vidjeli dva slučaja svakodnevne upotrebe prilikom korištenja zaviriti () je najjednostavnija opcija.
I kao i obično, primjeri su dostupni na GitHubu.