Java tarjoaa Java 8:aan uuden lisäpaketin nimeltä java.util.stream. Tämä paketti koostuu luokista, liitännöistä ja enumista, jotka mahdollistavat elementtien toiminnalliset toiminnot. Voit käyttää streamia tuomalla paketin java.util.stream.
Stream tarjoaa seuraavat ominaisuudet:
- Stream ei tallenna elementtejä. Se yksinkertaisesti välittää elementtejä lähteestä, kuten tietorakenteesta, taulukosta tai I/O-kanavasta, laskennallisten operaatioiden liukuhihnan kautta.
- Stream on luonteeltaan toimiva. Virtalle suoritetut toiminnot eivät muuta sen lähdettä. Esimerkiksi kokoelmasta saadun virran suodattaminen tuottaa uuden virran ilman suodatettuja elementtejä sen sijaan, että poistaisi elementtejä lähdekokoelmasta.
- Stream on laiska ja arvioi koodin vain tarvittaessa.
- Virran elementeissä käydään vain kerran virran elinkaaren aikana. Iteraattorin tapaan uusi stream on luotava, jotta voidaan käydä uudelleen samoissa lähteen elementeissä.
Voit käyttää streamia suodattamiseen, keräämiseen, tulostamiseen ja muuntamiseen tietorakenteesta toiseen jne. Seuraavissa esimerkeissä olemme soveltaneet erilaisia toimintoja streamin avulla.
Java Stream -käyttöliittymämenetelmät
menetelmät | Kuvaus |
---|---|
boolen allMatch (predikaattipredikaatti) | Se palauttaa kaikki tämän virran elementit, jotka vastaavat annettua predikaattia. Jos virta on tyhjä, palautetaan tosi ja predikaattia ei arvioida. |
boolean anyMatch (predikaattipredikaatti) | Se palauttaa minkä tahansa tämän virran elementin, joka vastaa annettua predikaattia. Jos virta on tyhjä, palautetaan false ja predikaattia ei arvioida. |
staattinen Stream.Builder builder() | Se palauttaa streamin rakentajan. |
R kerätä (keräilijäkeräilijä) | Se suorittaa muunnettavan vähennystoiminnon tämän virran elementeille käyttämällä Collectoria. Keräilijä kapseloi funktiot, joita käytetään argumentteina keräämiseen (Supplier, BiConsumer, BiConsumer), mikä mahdollistaa keräysstrategioiden uudelleenkäytön ja keräystoimintojen koostumuksen, kuten monitasoisen ryhmittelyn tai osioinnin. |
R collection (toimittajan toimittaja, BiConsumer-akku, BiConsumer-yhdistäjä) | Se suorittaa muuttuvan vähennysoperaation tämän virran elementeille. Muuttuva vähennys on sellainen, jossa vähennetty arvo on muunnettavissa oleva tulossäiliö, kuten ArrayList, ja elementit sisällytetään päivittämällä tuloksen tilaa sen sijaan, että tulos korvataan. |
staattinen Stream concat (Stream a, Stream b) | Se luo laiskasti ketjutetun virran, jonka elementit ovat kaikki ensimmäisen virran elementit, joita seuraa kaikki toisen virran elementit. Tuloksena oleva virta on järjestetty, jos molemmat tulovirrat ovat järjestettyjä, ja yhdensuuntainen, jos jompikumpi tulovirroista on rinnakkainen. Kun tuloksena oleva virta suljetaan, molempien tulovirtojen sulkemiskäsittelijät kutsutaan. |
pitkä laskenta () | Se palauttaa tämän virran elementtien määrän. Tämä on alennuksen erikoistapaus. |
Suoratoisto erillinen() | Se palauttaa virran, joka koostuu tämän virran erillisistä elementeistä (objektin Object.equals(Object) mukaan). |
staattinen stream tyhjä() | Se palauttaa tyhjän peräkkäisen virran. |
Suoratoistosuodatin (predikaattipredikaatti) | Se palauttaa virran, joka koostuu tämän virran elementeistä, jotka vastaavat annettua predikaattia. |
Valinnainen findAny() | Se palauttaa valinnaisen, joka kuvaa jotakin virran elementtiä, tai tyhjän valinnaisen, jos virta on tyhjä. |
Valinnainen findFirst() | Se palauttaa valinnaisen, joka kuvaa tämän virran ensimmäistä elementtiä, tai tyhjän valinnaisen, jos virta on tyhjä. Jos virralla ei ole kohtaamisjärjestystä, mikä tahansa elementti voidaan palauttaa. |
Suoratoista litteää karttaa (toiminto super T,? extends Stream>kartoittaja) | Se palauttaa virran, joka koostuu tuloksista, jotka on saatu tämän virran kunkin elementin korvaamisesta kartoitetun virran sisällöllä, joka on tuotettu käyttämällä annettua kuvaustoimintoa jokaiseen elementtiin. Jokainen kartoitettu virta suljetaan sen jälkeen, kun sen sisältö on sijoitettu tähän streamiin. (Jos yhdistetty stream on tyhjä, sen sijaan käytetään tyhjää virtaa.) |
DoubleStream flatMapToDouble (toimintokartoittaja) | Se palauttaa DoubleStreamin, joka koostuu tuloksista, jotka on saatu tämän virran kunkin elementin korvaamisesta kartoitetun virran sisällöllä, joka on tuotettu käyttämällä annettua kuvaustoimintoa jokaiseen elementtiin. Jokainen kartoitettu virta suljetaan sen jälkeen, kun sen sisältö on sijoitettu tähän streamiin. (Jos yhdistetty stream on tyhjä, sen sijaan käytetään tyhjää virtaa.) |
IntStream flatMapToInt (funktion kartoittaja) | Se palauttaa IntStreamin, joka koostuu tuloksista, jotka on saatu tämän virran jokaisen elementin korvaamisesta kartoitetun virran sisällöllä, joka on tuotettu käyttämällä annettua kuvaustoimintoa jokaiseen elementtiin. Jokainen kartoitettu virta suljetaan sen jälkeen, kun sen sisältö on sijoitettu tähän streamiin. (Jos yhdistetty stream on tyhjä, sen sijaan käytetään tyhjää virtaa.) |
LongStream flatMapToLong (funktion kartoittaja) | Se palauttaa LongStreamin, joka koostuu tuloksista, jotka on saatu tämän virran kunkin elementin korvaamisesta kartoitetun virran sisällöllä, joka on tuotettu käyttämällä annettua kuvaustoimintoa jokaiseen elementtiin. Jokainen kartoitettu virta suljetaan sen jälkeen, kun sen sisältö on sijoitettu tähän streamiin. (Jos yhdistetty stream on tyhjä, sen sijaan käytetään tyhjää virtaa.) |
mitätön forEach (kuluttajan toiminta) | Se suorittaa toiminnon tämän virran kullekin elementille. |
mitätön forEachOrdered (kuluttajan toiminta) | Se suorittaa toiminnon tämän virran kullekin elementille virran kohtaamisjärjestyksessä, jos virralla on määritetty kohtaamisjärjestys. |
staattisen virran luonti (toimittajat) | Se palauttaa äärettömän peräkkäisen järjestämättömän virran, jossa toimitettu Toimittaja on luonut jokaisen elementin. Tämä sopii vakiovirtojen, satunnaisten elementtien virtojen jne. luomiseen. |
staattinen virran iterointi (T siemen, UnaryOperator f) | Se palauttaa äärettömän peräkkäisen järjestetyn virran, joka on tuotettu funktion f iteratiivisella soveltamisella alkuelementin siemenelle, tuottaen virran, joka koostuu siemenestä, f(siemen), f(f(siemen)) jne. |
Suoratoistoraja (pitkä maksimikoko) | Se palauttaa virran, joka koostuu tämän virran elementeistä, jotka on katkaistu enintään maxSize-pituiseksi. |
Suoratoista karttaa (toimintokartoittaja) | Se palauttaa virran, joka koostuu tuloksista, jotka on saatu annetun funktion soveltamisesta tämän virran elementteihin. |
DoubleStream mapToDouble (ToDoubleFunction-kartoittaja) | Se palauttaa DoubleStreamin, joka koostuu tuloksista, jotka on saatu annetun funktion soveltamisesta tämän virran elementteihin. |
IntStream-karttaInt(ToIntFunction-kartoittaja) | Se palauttaa IntStreamin, joka koostuu tuloksista, jotka on saatu annetun funktion soveltamisesta tämän virran elementteihin. | LongStream karttaToLong (ToLongFunction-kartoittaja) | Se palauttaa LongStreamin, joka koostuu tuloksista, jotka on saatu annetun funktion soveltamisesta tämän virran elementteihin. |
Valinnainen max (vertailija) | Se palauttaa tämän virran enimmäiselementin toimitetun vertailijan mukaan. Tämä on alennuksen erikoistapaus. |
Valinnainen min (vertailija) | Se palauttaa tämän virran vähimmäiselementin toimitetun vertailijan mukaan. Tämä on alennuksen erikoistapaus. |
boolean noneMatch (predikaattipredikaatti) | Se palauttaa tämän virran elementit, jotka vastaavat annettua predikaattia. Jos virta on tyhjä, palautetaan tosi ja predikaattia ei arvioida. |
@SafeVarargs staattinen virta (T... arvot) | Se palauttaa peräkkäisen järjestetyn virran, jonka elementit ovat määritettyjä arvoja. |
staattinen virta (T t) | Se palauttaa peräkkäisen virran, joka sisältää yhden elementin. |
Suoratoisto (kuluttajan toiminta) | Se palauttaa virran, joka koostuu tämän virran elementeistä ja suorittaa lisäksi kullekin elementille tarjotun toiminnon, kun elementtejä kulutetaan tuloksena olevasta virrasta. |
Valinnainen vähennys (BinaryOperator-akku) | Se vähentää tämän virran elementtejä käyttämällä assosiatiivista kertymisfunktiota ja palauttaa valinnaisen, joka kuvaa pienennetyn arvon, jos sellainen on. |
T-vähennys(T-identiteetti, BinaryOperator-akku) | Se suorittaa pienennyksen tämän virran elementeille käyttämällä annettua identiteettiarvoa ja assosiatiivista kertymisfunktiota ja palauttaa pienennetyn arvon. |
U-vähennys(U-identiteetti, BiFunction-akku, BinaryOperator-yhdistäjä) | Se vähentää tämän virran elementtejä käyttämällä annettua identiteettiä, keräämistä ja yhdistämistoimintoja. |
Stream ohita (pitkä n) | Se palauttaa virran, joka koostuu tämän virran jäljellä olevista elementeistä, kun se on hylännyt virran ensimmäiset n elementtiä. Jos tämä virta sisältää vähemmän kuin n elementtiä, tyhjä virta palautetaan. |
Streami lajiteltu() | Se palauttaa virran, joka koostuu tämän virran elementeistä luonnollisen järjestyksen mukaan lajiteltuna. Jos tämän virran elementit eivät ole vertailukelpoisia, java.lang.ClassCastException voidaan heittää päätetoimintoa suoritettaessa. |
Virta lajiteltu (vertailija) | Se palauttaa virran, joka koostuu tämän virran elementeistä, lajiteltuna toimitetun vertailijan mukaan. |
Object[] toArray() | Se palauttaa taulukon, joka sisältää tämän virran elementit. |
A[] toArray (IntFunction-generaattori) | Se palauttaa taulukon, joka sisältää tämän virran elementit, käyttämällä toimitettua generaattoritoimintoa palautetun taulukon varaamiseen sekä mahdolliset lisätaulukot, joita voidaan tarvita osioituun suoritukseen tai koon muuttamiseen. |
Java-esimerkki: Kokoelman suodattaminen ilman Streamia
Seuraavassa esimerkissä suodatamme tietoja käyttämättä streamia. Tätä lähestymistapaa käytimme ennen stream-paketin julkaisua.
if-else lauseke java
import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); List productPriceList = new ArrayList(); for(Product product: productsList){ // filtering data of list if(product.price<30000){ productpricelist.add(product.price); adding price to a productpricelist } system.out.println(productpricelist); displaying data < pre> <p> <strong>Output:</strong> </p> <pre> [25000.0, 28000.0, 28000.0] </pre> <hr> <h3>Java Stream Example: Filtering Collection by using Stream</h3> <p>Here, we are filtering data by using stream. You can see that code is optimized and maintained. Stream provides fast execution.</p> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); List productPriceList2 =productsList.stream() .filter(p -> p.price > 30000)// filtering data .map(p->p.price) // fetching price .collect(Collectors.toList()); // collecting as list System.out.println(productPriceList2); } } </pre> <p> <strong>Output:</strong> </p> <pre> [90000.0] </pre> <hr> <h3>Java Stream Iterating Example</h3> <p>You can use stream to iterate any number of times. Stream provides predefined methods to deal with the logic you implement. In the following example, we are iterating, filtering and passed a limit to fix the iteration.</p> <pre> import java.util.stream.*; public class JavaStreamExample { public static void main(String[] args){ Stream.iterate(1, element->element+1) .filter(element->element%5==0) .limit(5) .forEach(System.out::println); } } </pre> <p> <strong>Output:</strong> </p> <pre> 5 10 15 20 25 </pre> <hr> <h3>Java Stream Example: Filtering and Iterating Collection</h3> <p>In the following example, we are using filter() method. Here, you can see code is optimized and very concise.</p> <pre> import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // This is more compact approach for filtering data productsList.stream() .filter(product -> product.price == 30000) .forEach(product -> System.out.println(product.name)); } } </pre> <p> <strong>Output:</strong> </p> <pre> Dell Laptop </pre> <hr> <h3>Java Stream Example : reduce() Method in Collection</h3> <p>This method takes a sequence of input elements and combines them into a single summary result by repeated operation. For example, finding the sum of numbers, or accumulating elements into a list. </p> <p>In the following example, we are using reduce() method, which is used to sum of all the product prices.</p> <pre> import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // This is more compact approach for filtering data Float totalPrice = productsList.stream() .map(product->product.price) .reduce(0.0f,(sum, price)->sum+price); // accumulating price System.out.println(totalPrice); // More precise code float totalPrice2 = productsList.stream() .map(product->product.price) .reduce(0.0f,Float::sum); // accumulating price, by referring method of Float class System.out.println(totalPrice2); } } </pre> <p> <strong>Output:</strong> </p> <pre> 201000.0 201000.0 </pre> <hr> <h3>Java Stream Example: Sum by using Collectors Methods</h3> <p>We can also use collectors to compute sum of numeric values. In the following example, we are using Collectors class and it?s specified methods to compute sum of all the product prices.</p> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // Using Collectors's method to sum the prices. double totalPrice3 = productsList.stream() .collect(Collectors.summingDouble(product->product.price)); System.out.println(totalPrice3); } } </pre> <p> <strong>Output:</strong> </p> <pre> 201000.0 </pre> <hr> <h3>Java Stream Example: Find Max and Min Product Price</h3> <p>Following example finds min and max product price by using stream. It provides convenient way to find values without using imperative approach.</p> <pre> import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // max() method to get max Product price Product productA = productsList.stream().max((product1, product2)->product1.price > product2.price ? 1: -1).get(); System.out.println(productA.price); // min() method to get min Product price Product productB = productsList.stream().min((product1, product2)->product1.price > product2.price ? 1: -1).get(); System.out.println(productB.price); } } </pre> <p> <strong>Output:</strong> </p> <pre> 90000.0 25000.0 </pre> <hr> <h3>Java Stream Example: count() Method in Collection</h3> <pre> import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // count number of products based on the filter long count = productsList.stream() .filter(product->product.price<30000) .count(); system.out.println(count); } < pre> <p> <strong>Output:</strong> </p> <pre> 3 </pre> <p>stream allows you to collect your result in any various forms. You can get you result as set, list or map and can perform manipulation on the elements.</p> <hr> <h3>Java Stream Example : Convert List into Set</h3> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // Converting product List into Set Set productPriceList = productsList.stream() .filter(product->product.price product.price) .collect(Collectors.toSet()); // collect it as Set(remove duplicate elements) System.out.println(productPriceList); } } </pre> <p> <strong>Output:</strong> </p> <pre> [25000.0, 28000.0] </pre> <hr> <h3>Java Stream Example : Convert List into Map</h3> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // Converting Product List into a Map Map productPriceMap = productsList.stream() .collect(Collectors.toMap(p->p.id, p->p.name)); System.out.println(productPriceMap); } } </pre> <p> <strong>Output:</strong> </p> <pre> {1=HP Laptop, 2=Dell Laptop, 3=Lenevo Laptop, 4=Sony Laptop, 5=Apple Laptop} </pre> <hr> <h3>Method Reference in stream</h3> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } public int getId() { return id; } public String getName() { return name; } public float getPrice() { return price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); List productPriceList = productsList.stream() .filter(p -> p.price > 30000) // filtering data .map(Product::getPrice) // fetching price by referring getPrice method .collect(Collectors.toList()); // collecting as list System.out.println(productPriceList); } } </pre> <p> <strong>Output:</strong> </p> <pre> [90000.0] </pre> <hr></30000)></pre></30000){>
Java Stream Esimerkki: Kokoelman suodattaminen Streamin avulla
Tässä suodatamme tietoja streamin avulla. Voit nähdä, että koodi on optimoitu ja sitä ylläpidetään. Stream tarjoaa nopean toteutuksen.
import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); List productPriceList2 =productsList.stream() .filter(p -> p.price > 30000)// filtering data .map(p->p.price) // fetching price .collect(Collectors.toList()); // collecting as list System.out.println(productPriceList2); } }
Lähtö:
[90000.0]
Esimerkki Java Stream -toistosta
Voit käyttää streamia iteroidaksesi kuinka monta kertaa tahansa. Stream tarjoaa ennalta määritettyjä menetelmiä toteuttamasi logiikan käsittelemiseksi. Seuraavassa esimerkissä iteroimme, suodatamme ja ohitamme rajan iteroinnin korjaamiseksi.
import java.util.stream.*; public class JavaStreamExample { public static void main(String[] args){ Stream.iterate(1, element->element+1) .filter(element->element%5==0) .limit(5) .forEach(System.out::println); } }
Lähtö:
5 10 15 20 25
Esimerkki Java Stream -kokoelmasta: suodatus ja iterointi
Seuraavassa esimerkissä käytämme filter()-menetelmää. Täällä voit nähdä, että koodi on optimoitu ja erittäin ytimekäs.
import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // This is more compact approach for filtering data productsList.stream() .filter(product -> product.price == 30000) .forEach(product -> System.out.println(product.name)); } }
Lähtö:
Dell Laptop
Java Stream -esimerkki: vähentää()-menetelmä kokoelmassa
Tämä menetelmä ottaa sarjan syöteelementtejä ja yhdistää ne yhdeksi yhteenvetotulokseen toistuvalla toiminnolla. Esimerkiksi lukujen summan löytäminen tai elementtien kerääminen luetteloon.
Seuraavassa esimerkissä käytämme vähentä()-menetelmää, jota käytetään kaikkien tuotteiden hintojen summaamiseen.
import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // This is more compact approach for filtering data Float totalPrice = productsList.stream() .map(product->product.price) .reduce(0.0f,(sum, price)->sum+price); // accumulating price System.out.println(totalPrice); // More precise code float totalPrice2 = productsList.stream() .map(product->product.price) .reduce(0.0f,Float::sum); // accumulating price, by referring method of Float class System.out.println(totalPrice2); } }
Lähtö:
201000.0 201000.0
Java Stream Esimerkki: Summa käyttämällä Collectors Methods -menetelmiä
Voimme käyttää myös keräilijöitä numeeristen arvojen summan laskemiseen. Seuraavassa esimerkissä käytämme Collectors-luokkaa ja sen määrittelemiä menetelmiä kaikkien tuotteiden hintojen summan laskemiseen.
import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // Using Collectors's method to sum the prices. double totalPrice3 = productsList.stream() .collect(Collectors.summingDouble(product->product.price)); System.out.println(totalPrice3); } }
Lähtö:
201000.0
Java Stream -esimerkki: Etsi tuotteen enimmäis- ja vähimmäishinta
Seuraava esimerkki löytää tuotteen minimi- ja maksimihinnan streamin avulla. Se tarjoaa kätevän tavan löytää arvoja ilman pakottavaa lähestymistapaa.
import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // max() method to get max Product price Product productA = productsList.stream().max((product1, product2)->product1.price > product2.price ? 1: -1).get(); System.out.println(productA.price); // min() method to get min Product price Product productB = productsList.stream().min((product1, product2)->product1.price > product2.price ? 1: -1).get(); System.out.println(productB.price); } }
Lähtö:
90000.0 25000.0
Java Stream Esimerkki: count() -menetelmä kokoelmassa
import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // count number of products based on the filter long count = productsList.stream() .filter(product->product.price<30000) .count(); system.out.println(count); } < pre> <p> <strong>Output:</strong> </p> <pre> 3 </pre> <p>stream allows you to collect your result in any various forms. You can get you result as set, list or map and can perform manipulation on the elements.</p> <hr> <h3>Java Stream Example : Convert List into Set</h3> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // Converting product List into Set Set productPriceList = productsList.stream() .filter(product->product.price product.price) .collect(Collectors.toSet()); // collect it as Set(remove duplicate elements) System.out.println(productPriceList); } } </pre> <p> <strong>Output:</strong> </p> <pre> [25000.0, 28000.0] </pre> <hr> <h3>Java Stream Example : Convert List into Map</h3> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // Converting Product List into a Map Map productPriceMap = productsList.stream() .collect(Collectors.toMap(p->p.id, p->p.name)); System.out.println(productPriceMap); } } </pre> <p> <strong>Output:</strong> </p> <pre> {1=HP Laptop, 2=Dell Laptop, 3=Lenevo Laptop, 4=Sony Laptop, 5=Apple Laptop} </pre> <hr> <h3>Method Reference in stream</h3> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } public int getId() { return id; } public String getName() { return name; } public float getPrice() { return price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); List productPriceList = productsList.stream() .filter(p -> p.price > 30000) // filtering data .map(Product::getPrice) // fetching price by referring getPrice method .collect(Collectors.toList()); // collecting as list System.out.println(productPriceList); } } </pre> <p> <strong>Output:</strong> </p> <pre> [90000.0] </pre> <hr></30000)>
streamin avulla voit kerätä tuloksesi kaikissa eri muodoissa. Voit saada tuloksesi joukkona, luettelona tai kartana ja voit muokata elementtejä.
Esimerkki Java-virrasta: Muunna luettelo joukoksi
import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // Converting product List into Set Set productPriceList = productsList.stream() .filter(product->product.price product.price) .collect(Collectors.toSet()); // collect it as Set(remove duplicate elements) System.out.println(productPriceList); } }
Lähtö:
[25000.0, 28000.0]
Java Stream -esimerkki: Muunna luettelo kartaksi
import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // Converting Product List into a Map Map productPriceMap = productsList.stream() .collect(Collectors.toMap(p->p.id, p->p.name)); System.out.println(productPriceMap); } }
Lähtö:
{1=HP Laptop, 2=Dell Laptop, 3=Lenevo Laptop, 4=Sony Laptop, 5=Apple Laptop}
Menetelmäviittaus virrassa
import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } public int getId() { return id; } public String getName() { return name; } public float getPrice() { return price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); List productPriceList = productsList.stream() .filter(p -> p.price > 30000) // filtering data .map(Product::getPrice) // fetching price by referring getPrice method .collect(Collectors.toList()); // collecting as list System.out.println(productPriceList); } }
Lähtö:
[90000.0]
30000)>30000){>