Dart Academy · Lekcja

Transformowanie strumieni: map, where, take

Zmiana kształtu sekwencji zdarzeń

Lekcja 3 z 413 kroki

Transformowanie strumieni: map, where, take to bezpłatna lekcja Dart Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Dart Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Dart Academy zawiera 4 lekcji w sumie.

Strumienie można przekształcać

Podobnie jak listy, strumienie mają przydatne metody zmieniające ich zdarzenia. Można przekształcić strumień w nowy bez modyfikowania źródła.

map przekształca każde zdarzenie

Metoda map uruchamia funkcję dla każdego zdarzenia i emituje wynik. Zamienia jeden strumień wartości w strumień przekształconych wartości.

final doubled = numbers.map((n) => n * 2);

map zachowuje liczbę zdarzeń

W przypadku map liczba zdarzeń pozostaje taka sama — zmienia się tylko ich postać. Trzy dane wejściowe zawsze dają dokładnie trzy wyniki. ✨

Stream.fromIterable([1, 2, 3])
    .map((n) => 'Item $n');

where filtruje zdarzenia

Metoda where zachowuje tylko zdarzenia, które przejdą test. Wszystko, co zwróci wartość false, zostaje usunięte z nowego strumienia.

final evens = numbers.where((n) => n.isEven);

where może zmniejszyć strumień

W przeciwieństwie do map metoda where może wyemitować mniej zdarzeń, niż otrzymała. Jeśli żadne zdarzenie nie przejdzie testu, wynikowy strumień pozostanie pusty.

take ogranicza liczbę zdarzeń

Metoda take emituje tylko pierwszych n zdarzeń, a następnie przestaje nasłuchiwać. Jest idealna, gdy z długiego strumienia potrzebnych jest tylko kilka wartości. 🎯

final firstThree = bigStream.take(3);

take anuluje wcześniej

Po dostarczeniu n zdarzeń metoda take automatycznie anuluje subskrypcję źródłowego strumienia. Oryginalny strumień przestaje generować zdarzenia na potrzeby tego odbiorcy.

Łączenie przekształceń

Metody te zwracają nowe strumienie, więc można je łączyć. Łańcuch należy czytać od lewej do prawej: filtrowanie, następnie przekształcanie, a na końcu ograniczenie.

numbers
    .where((n) => n.isEven)
    .map((n) => n * 10)
    .take(2);

Z natury leniwe

Przekształcenia są leniwe: nic się nie wykonuje, dopóki strumień nie jest nasłuchiwany. Łańcuch przetwarza zdarzenia dopiero w miarę ich nadejścia, po jednym naraz.

Więcej narzędzi: takeWhile i skip

Oprócz trzech podstawowych metod takeWhile emituje zdarzenia do momentu niepowodzenia testu, a skip pomija pierwszych n zdarzeń. Obowiązuje ten sam styl łączenia metod.

stream.skip(2).takeWhile((n) => n < 100);

Odczytywanie wyniku

Po przekształceniu nowy strumień można odczytać za pomocą await for albo nasłuchiwać go bezpośrednio. Każda wyemitowana wartość przeszła już przez cały zdefiniowany łańcuch.

await for (final v in transformed) {
  print(v);
}

Szybki test

Która metoda może zmniejszyć liczbę zdarzeń?

Podsumowanie

Strumienie można przekształcać za pomocą map, filtrować przez where i ograniczać przez take. Wszystkie te metody można łączyć, a ich działanie pozostaje leniwe do czasu rozpoczęcia nasłuchiwania. 🎉

Bezpłatny start

Ucz się Dart dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
30
Lekcje
120

Często zadawane pytania

Czy lekcja „Transformowanie strumieni: map, where, take” jest bezpłatna?

Tak — pełny tekst „Transformowanie strumieni: map, where, take” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Dart Academy, przejdź na CoddyKit PRO. Kurs Dart Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Transformowanie strumieni: map, where, take”?

Zmiana kształtu sekwencji zdarzeń Ćwiczysz Dart Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Dart Academy?

Nie wymagamy żadnego doświadczenia. Dart Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Transformowanie strumieni: map, where, take”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Dart Academy?

Tak. Każda lekcja Dart Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Nasłuchiwanie za pomocą await for
  2. Strumienie pojedyncze a rozgłoszeniowe
  3. Transformowanie strumieni: map, where, take
  4. Tworzenie strumieni za pomocą async*
← Powrót do Dart Academy