Stream API. Часть 2. Промежуточные методы для фильтрации данных.

Sdílet
Vložit
  • čas přidán 3. 03. 2021
  • Программу данного курса вы можете посмотреть по ссылке - docs.google.com/document/d/1H...
    В этой лекции мы рассмотрим промежуточные методы Stream API для фильтрации данных.
    Ссылка на конспект этой лекции - drive.google.com/file/d/1gKTy...

Komentáře • 11

  • @RudiyOrm
    @RudiyOrm Před 2 lety +4

    Спасибо! Познавательно

  • @user-mu6lt7kz7b
    @user-mu6lt7kz7b Před 2 lety +4

    за задания отдельные спасибо!

  • @manOfPlanetEarth
    @manOfPlanetEarth Před 2 lety

    Не совсем понял про пару dropWhile/takeWhile. В лекции, вроде, говорится, что они работают от первого "true" до первого "false".
    Но как я понял, они работают либо только для ПЕРВЫХ элементов в потоке (если предикат для них дает true (начиная с самого первого элемента)), либо вообще не работают. Т.е. нельзя из середины потока либо забрать элементы (takeWhile), либо удалить элементы (dropWhile).
    Пример ниже не удалет нули. Выводится исходный набор элементов:
    import java.util.stream.*;
    class I
    {
    public static void main (String[] args) throws java.lang.Exception
    {
    IntStream.of(5,5,5,0,0,0,5,5,0,0,1)
    .unordered()
    .dropWhile(x-> x==0)
    .forEach(System.out::println);
    }
    }

    • @oleksandrtsymbaliuk
      @oleksandrtsymbaliuk  Před 2 lety

      Так на самом деле мы же говорим о одном и том же. В вашем примере вы получите false на первом элементе, и все работа dropWhile окончена. И да конечно ничего не изменится в вашем примере. Тоже самое и takeWhile.

    • @manOfPlanetEarth
      @manOfPlanetEarth Před 2 lety

      @@oleksandrtsymbaliuk
      Ну, в общем, я не уловил акцента, что эти методы работают именно на первых элементах:) Первое подмножество в середине потока они "брать" не будут.

  • @valentinaboiko6060
    @valentinaboiko6060 Před 5 měsíci

    что-то не получается четвертое задание.. (( там должны быть использованы takeWhile, dropWhile?

    • @oleksandrtsymbaliuk
      @oleksandrtsymbaliuk  Před 5 měsíci

      Добрый день. Нет не нужно. Тут классический filter

    • @valentinaboiko6060
      @valentinaboiko6060 Před 5 měsíci

      @@oleksandrtsymbaliuk String dependecies = "org.springframework.boot
      " +
      " spring-boot-starter-parent
      " +
      " 3.2.2
      " +
      "
      " +
      "
      " +
      " com.example
      " +
      " demo
      " +
      " 0.0.1-SNAPSHOT
      " +
      " demo";
      String[] lines = dependecies.split("\
      ");

      List groupIds = Arrays.stream(lines).filter(s -> s.contains("") && s.contains(""))
      .map(s->s.replaceAll("","")
      .replaceAll("","")).collect(Collectors.toList());
      System.out.println(groupIds);

    • @oleksandrtsymbaliuk
      @oleksandrtsymbaliuk  Před 5 měsíci

      Да что то типа такого

  • @manOfPlanetEarth
    @manOfPlanetEarth Před 2 lety

    Когда говорится о конвейерной природе потоков, т.е. каждый элемент проходит всю цепочку методов вплоть до терминального, можно упомянуть о промежуточном методе sorted как об исключении)
    Видел более наглядный подхой к этому моменту: прямо в цепочку вставлять вывод на экран названия текущего промежуточного метода. Тогда лучше видно как "живут" элементы в потоке:
    Stream.of("d2", "a2", "b1", "b3", "c")
    .sorted((s1, s2) -> {
    System.out.printf("sort: %s; %s
    ", s1, s2);
    return s1.compareTo(s2);
    })
    .filter(s -> {
    System.out.println("filter: " + s);
    return s.startsWith("a");
    })
    .map(s -> {
    System.out.println("map: " + s);
    return s.toUpperCase();
    })
    .forEach(s -> System.out.println("forEach: " + s));

    • @manOfPlanetEarth
      @manOfPlanetEarth Před 2 lety

      Начал смотреть четвертую часть про стримы: именно этот подход вы там и применяете:)))🤷‍♂️😀