MySQL Java JavaScript PHP Python HTML-CSS C-sharp

Obținerea unui subflux și combinarea fluxurilor

O serie de metode din Stream API returnează subfluxuri sau fluxuri combinate pe baza fluxurilor existente. Să analizăm aceste metode.

Metoda takeWhile()

Metoda takeWhile() selectează din flux elementele care corespund unei condiții. Dacă întâlnește un element care nu respectă condiția, metoda își încheie execuția. Elementele selectate sunt returnate sub formă de flux.

import java.util.stream.Stream;

public class Program {

   public static void main(String[] args) {

       Stream<Integer> numbers = Stream.of(-3, -2, -1, 0, 1, 2, 3, -4, -5);
       numbers.takeWhile(n -> n < 0)
           .forEach(n -> System.out.println(n));
   }
}

În acest exemplu, programul selectează din flux numerele mai mici decât zero. Rezultatul afișat pe consolă va fi:

-3 
-2 
-1

Chiar dacă în flux mai sunt numere negative, metoda se oprește când întâlnește primul număr care nu îndeplinește condiția. Aceasta este diferența principală față de metoda filter().

Pentru a acoperi toate elementele mai mici decât zero, fluxul ar trebui sortat în prealabil:

Stream<Integer> numbers = Stream.of(-3, -2, -1, 0, 1, 2, 3, -4, -5);
numbers.sorted().takeWhile(n -> n < 0)
       .forEach(n -> System.out.println(n));

Rezultatul afișat pe consolă va fi:

-5 
-4 
-3 
-2 
-1

Metoda dropWhile()

Metoda dropWhile() realizează o sarcină opusă - omite elementele din flux care îndeplinesc condiția, până întâlnește un element care nu îndeplinește condiția:

Stream<Integer> numbers = Stream.of(-3, -2, -1, 0, 1, 2, 3, -4, -5);
numbers.sorted().dropWhile(n -> n < 0)
   .forEach(n -> System.out.println(n));

Rezultatul afișat pe consolă va fi:




3

Metoda statică concat()

Metoda statică concat() unește elementele din două fluxuri și returnează fluxul combinat:

import java.util.stream.Stream;

public class Program {

   public static void main(String[] args) {

       Stream<String> people1 = Stream.of("Tom", "Bob", "Sam");
       Stream<String> people2 = Stream.of("Alice", "Kate", "Sam");

       Stream.concat(people1, people2).forEach(n -> System.out.println(n));
   }
}

Rezultatul afișat pe consolă va fi:

Tom  
Bob  
Sam  
Alice  
Kate  
Sam

Metoda distinct()

Metoda distinct() returnează doar elementele unice sub formă de flux:

Stream<String> people = Stream.of("Tom", "Bob", "Sam", "Tom", "Alice", "Kate", "Sam");
people.distinct().forEach(p -> System.out.println(p));

Rezultatul afișat pe consolă va fi:

Tom  
Bob  
Sam  
Alice  
Kate
← Lecția anterioară Lecția următoare →