Лекция 9. Stream API Терминальные операции и коллекторы

Поділитися
Вставка
  • Опубліковано 24 гру 2024

КОМЕНТАРІ • 20

  • @viewer_evgeniy
    @viewer_evgeniy 4 місяці тому +3

    Это просто нечто. Очень редко случается найти спикера, которого просто взахлеб слушаешь. Жалко, что Тагир не в мире веб-разработки. Очень бы хотел послушать от него про спринг, хибер, паттерны и лучшие практики во всем этом, как он рассказывает про Java Core.

  • @ansarozden5767
    @ansarozden5767 Рік тому +10

    Спасибо большое Тагиру и учебному центру за то, что вот так бескорыстно предоставляете доступ к своим лекциям!

  • @ЮрийШотин
    @ЮрийШотин Рік тому +1

    Очень познавательно. Чем больше смотрю про Stream API, тем больше нового узнаю. Полезно знать про реализацию в разных версиях Java.

  • @John_Smith_Java
    @John_Smith_Java 2 роки тому +5

    Коллекторы - восхитительны!
    Тагир - великолепен!

  • @PatBatTB
    @PatBatTB Рік тому +1

    Спасибо за курс!
    Думаю было бы хорошим тоном ссылки из видео дублировать в описании. ))

  • @John_Smith_Java
    @John_Smith_Java 2 роки тому +7

    7:25 "в этом месте мы начинаем спускать в ад" - в голосину😂😂😂

    • @virus0936
      @virus0936 Рік тому

      Тоже проорал)

  • @oldjohn1503
    @oldjohn1503 Рік тому

    Спасибо, Тагир! Разжевал)

  • @John_Smith_Java
    @John_Smith_Java 2 роки тому +4

    Тагир крутой.

  • @ShadowKevil
    @ShadowKevil 10 місяців тому

    В лекции почти не коснулись параллельных стримов.
    Почему не стоит использовать параллельные стримы по умолчанию?

    • @arvoglade8753
      @arvoglade8753 4 місяці тому

      Параллельные стримы не стоит использовать по умолчанию, из-за накладных расходов на распараллеливание до, слияние после и управление потоками и дополнительной памятью в процессе. Например на сотне элементов параллельные стримы могут работать в тысячи раз медленнее, чем обычные. Стоит распараллеливать, если объём данных ожидается большой, и, что важнее, если вы понимаете, что это узкое место, вы провели тесты, и выяснилось, что параллельные стримы работают лучше. Нет универсального и одновременно точного способа теоретически понять, когда распараллеливание показывает выгоду, поэтому лучше проверять

  • @АнтонВаськин-б1б

    кто - нибудь решил упражнение с 54:25 ?

    • @anastasiya_pesto
      @anastasiya_pesto Рік тому

      Я пытаюсь сижу, пока не получилось. А ты решил?

    • @АнтонВаськин-б1б
      @АнтонВаськин-б1б Рік тому

      @@anastasiya_pesto неа , просто , кажется , как будто и невозможно

    • @DenisReto
      @DenisReto Рік тому

      Без промежуточного итога не получилось решить, только если добавить промежуточный класс
      public record UserDepartment(User user, Department department) {
      };
      То решение такое:
      private Map getUserChiefs(Company company) {
      Stream userDepartments = company.departments
      .flatMap(d -> d.users.map((u -> new UserDepartment(u, d))));
      return userDepartments
      .collect(groupingBy(ud -> ud.user,
      mapping(ud -> ud.department.chief, toList())
      ));
      }

    • @DenisReto
      @DenisReto Рік тому

      ну и такой тест прогнал для наглядности
      @Test
      public void test() {
      //map key - is user - worker
      //map - value list of chiefs
      User denis = new User("Denis");
      User jack = new User("Jack");
      User john = new User("John");
      User bob = new User("Bob");
      User ivan = new User("Ivan");
      Department itDepartment = new Department("IT", john, Stream.of(denis, jack, bob));
      Department accountingDepartment = new Department("Accounting", ivan, Stream.of(jack, bob));
      Company megaIndustrials = new Company(Stream.of(itDepartment, accountingDepartment));
      Map userChiefs = getUserChiefs(megaIndustrials);
      assertTrue(userChiefs.containsKey(jack));
      assertEquals(2, userChiefs.get(jack).size());
      assertEquals(2, userChiefs.get(bob).size());
      assertTrue(userChiefs.get(jack).containsAll(List.of(john, ivan)));
      assertTrue(userChiefs.get(bob).containsAll(List.of(john, ivan)));
      assertEquals(1, userChiefs.get(denis).size());
      assertTrue(userChiefs.get(denis).contains(john));
      }

    • @dotherap
      @dotherap Рік тому +1

      @@MaksimWojtk я вот так сделал через группировку:
      company.departments().stream()
      .flatMap(d -> d.users()
      .map(u -> new AbstractMap.SimpleEntry(u, d.chief()) {}))
      .collect(groupingBy(AbstractMap.SimpleEntry::getKey,
      mapping(AbstractMap.SimpleEntry::getValue, toList())))
      Но идею с парой использовал вашу. Не знаю, возможно ли как-то проще.

  • @Анастасия-ц1х
    @Анастасия-ц1х Рік тому

    на втором часе мозг закипел... тяжеловато.