Основы работы со Stream API в Java

Поділитися
Вставка
  • Опубліковано 27 вер 2024
  • В данном видео я попытался рассказать о базовых (исключительно практических) возможностях Stream API в языке Java.
    Ссылки
    Репозиторий с кодом из видео:
    github.com/pro...
    Книга по Java 11:
    www.amazon.com...
    Functional programming:
    blogs.oracle.c...
    Stream API:
    www.oracle.com...
    Нововведения Java 11:
    www.oracle.com...

КОМЕНТАРІ • 124

  • @dark_evil77
    @dark_evil77 4 роки тому +33

    Этот мужик заслуживает больше лайков и подписчиков!

  • @Никита-ж1ф1в
    @Никита-ж1ф1в 3 роки тому +54

    Посмотрев видео про стримы в начале изучения джавы, это видео казалось запутнным и сложным. Спустя 8 месяцев изучения джавы и поработав и написав пет проект с использованием спринга , и занявшесь уплотнением знаний стримов и т.д., наткнулся на видео снова , насколько же просто смотреть и все понимать )

    • @eugenenovikov671
      @eugenenovikov671 3 роки тому +2

      мне после javascript и без явы всё понятно, в яваскрипте это по дефолту

    • @M.Makart
      @M.Makart 2 роки тому +1

      Впервые до Java узнал о функциональном подходе в Python (цепочки методов map, reduce, filter, ...). Python - хороший язык для понимания функционального подхода в первый раз.

    • @m.m.576
      @m.m.576 Рік тому

      ++++

  • @natalyasucher3770
    @natalyasucher3770 4 роки тому +8

    Как здорово ты объясняешь, Евгений!!! Продолжай, пожалуйста!

  • @svetlanamazhaykina6918
    @svetlanamazhaykina6918 9 місяців тому

    Спасибо за Ваш труд! Коммент в поддержку канала.

  • @davionsoft5762
    @davionsoft5762 2 роки тому +10

    3:35
    Стоит упомянуть, что при List.of и тп -> создается Unmodifiable (Immutable) коллекция
    Т.е с ним нельзя проводить операции replace/add/remove

  • @dimasamsonau3646
    @dimasamsonau3646 3 роки тому +9

    Блин, Женька как всегда красавчик) вот стримы - вот так вот с ними работать надо. Все понятно и без воды! спасибо

  • @МихаилШкольный-з9ч
    @МихаилШкольный-з9ч 3 роки тому +4

    Спасибо за видео, очень доступно объясняете. Понятные примеры со сравнением аналогичной логики программы с использованием старых методик(for, if..).
    Побольше бы таких видео..

  • @niener4176
    @niener4176 2 роки тому +1

    Спасибо, всё упорядочено, сгруппировано и, как следствие, просто.

  • @anjelomanoranjan
    @anjelomanoranjan 11 місяців тому

    Одно удовольствие смотреть твои обучающие видео.

  • @Noname2685
    @Noname2685 2 роки тому

    Определенно лучшее видео!

  • @HABVSHABVS
    @HABVSHABVS 2 роки тому

    Очень доступное объяснение, без воды и многословия.

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

    Большое спасибо, Евгений. Очень хорошее понятное видео. Продолжайте, пожалуйста.

  • @abuyasin2931
    @abuyasin2931 2 роки тому

    Ничего нового - Евгений как всегда всё разложил ну просто гениально.

  • @РахатбекКожантаев

    Красавчик! Дай бог тебе здоровье и много много хорошего! Спасибо за твои видосы.

  • @denys_kovpaka
    @denys_kovpaka 4 роки тому +11

    Отличное видео на примерах. Спасибо за материал. P.S. Будет здорово увидеть похожее видео по новым фичам из Java 11)))

    • @EugeneSuleimanov
      @EugeneSuleimanov  4 роки тому +3

      Спасибо за отзыв. Есть наработки по этой теме, но, не знаю, когда смогу выложить видео

  • @АртемШуранов-ш7м

    Сегодня это видео мне очень помогло, не знаю, чтобы я без него делал. Спасибо!

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

      Спасибо за отзыв!
      Рад, что материал оказался полезен.

  • @bolatashirbek
    @bolatashirbek 4 роки тому +4

    Спасибо за хорошее видео. Было бы хорошо если вы продолжили снимать на примерах про нововведения Java 8, такие как: Лямбда, Optional, Функциональные интерфейсы

  • @sultankodirov3038
    @sultankodirov3038 3 роки тому +2

    Respect! очень здорово объясняешь/ я как 20 дней изучаю сам Stream не смог сделать общую понятию про это/ спасибо тебе !!!! других новый материалов тоже объяснил бы так как сравнив со старой версий//// спасибо тебе !

    • @EugeneSuleimanov
      @EugeneSuleimanov  3 роки тому +1

      Спасибо за отзыв, рад, что материал оказался полезен :)

  • @ПесДюк-г6н
    @ПесДюк-г6н 3 роки тому

    Готовлюсь к собеседованию. Огромная благодарность за такой понятный урок!!!

  • @Павел-ф8к
    @Павел-ф8к 3 роки тому

    комментарий для развития Вашего канала, спасибо за ценную информацию, успехов!

  • @ps1795
    @ps1795 4 роки тому +14

    пурум пурум))!

  • @RG-em1nh
    @RG-em1nh 3 роки тому

    Супер продуктивно Евгений ! Спасибо !

  • @ЭдуардДемерчян-с8г
    @ЭдуардДемерчян-с8г 4 роки тому +1

    Группировку старым способом я бы сделал по другому - не сначала запихал все специальности в мапу, а при обходе коллекции проверял на наличие ключа, если такой ключ есть, то добавляем сотрудника в лист значений, если нет, то создаем новый Entry. Да и цикл в старых способах нужно использовать foreach который - кода было бы гораздо меньше

  • @javastream9414
    @javastream9414 3 роки тому

    Евгений, спасибо, крутой обзор

  • @ВячеславАртамонов-т1ь

    Как всегда топ контент. Спасибо.

  • @dondigidon1633
    @dondigidon1633 3 роки тому

    Спасибо за труды! Ты молодец! 👍👍👍

  • @TheSelectmax
    @TheSelectmax 4 роки тому

    Спасибо, очень полезное практическое видео! Надеюсь, почитаю ссылки и буду еще более благодарен =)

  • @БорисПороднов-ъ4с
    @БорисПороднов-ъ4с 2 роки тому

    Спасибо огромное

  • @saimon4947
    @saimon4947 3 роки тому

    Спасибо за понятное объяснение!

  • @wildjoe6259
    @wildjoe6259 4 роки тому +16

    Как всегда, огромная благодарность за видео!

  • @ЕкатеринаКригер-ы9в

    прум-прум-прум )

  • @haroldfinch7492
    @haroldfinch7492 4 роки тому

    Спасибо, отличный урок

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

    Спасибо

  • @vass8180
    @vass8180 2 роки тому

    BigDecimal - зарплата тонко)

  • @elenazelenaya6783
    @elenazelenaya6783 4 роки тому

    Спасибо большое за обьяснение))

  • @Mr.J248
    @Mr.J248 4 роки тому

    Спасибо за видео очень полезно

  • @alphabet-f1o
    @alphabet-f1o 4 роки тому +1

    Благодарю!

  • @_Vertan_
    @_Vertan_ 4 роки тому

    Функциональные интерфейсы (а именно возможность заменить его лябдой, как и сами лябды) появились уже в Java 8, List.of делает то же самое, что и старый Arrays.asList возвращая тот же самый иммутабельный список. Так же в Java 8 появился и method reference, который очень активно используется в примерах, но никак не обозначается и не объясняется. Но вообще интересное видео) правда сам ещё пишу на восьмой джаве, но похоже пора уже осваивать одиннадцатую)

    • @EugeneSuleimanov
      @EugeneSuleimanov  4 роки тому

      По функциональным интерфейсам и метод референс - согласен на 100%. А вот asList() возвращает мутабельный лист, List.of() - иммутабельный. И спасибо за отзыв :)

    • @_Vertan_
      @_Vertan_ 4 роки тому

      @@EugeneSuleimanov думаю, неужели меня уже склероз хватил в мои то годы?) в общем полез в доки и напротив asList() стоит "Returns a fixed-size list backed by the specified array", понимаю что это не совсем иммутабельный лист, но на практике почти всегда он таковым и является, так что вы правы в том, что разница всё-таки есть

    • @EugeneSuleimanov
      @EugeneSuleimanov  4 роки тому

      @@_Vertan_ тоже самое - полез в доку после того, как написал - сомнения появились.
      По факту вы правы - на практике, в 99% случаев - разницы нет. Спасибо за ваше уточнение.

    • @_Vertan_
      @_Vertan_ 4 роки тому

      @@EugeneSuleimanov вам спасибо за ваш труд, смотрю ваши видео по спрингу с большим удовольствием и пользой)

  • @АлександрБугримов-о1е

    Спасибо за видео.

  • @krab9512
    @krab9512 4 роки тому +1

    Крутое видео, как и все остальные, очень нравится смотреть талантливых авторов, спасибо за труды)
    И еще вопрос, где можно попрактиковаться по Java Stream API? Может быть есть книги, где много практических заданий или сайты, очень хочется самому порешать что-то. Буду очень благодарен Вашему фидбеку)

    • @EugeneSuleimanov
      @EugeneSuleimanov  4 роки тому +1

      Спасибо за отзыв! Думаю, здесь наиболее полная информация
      www.oracle.com/technical-resources/articles/java/ma14-java-se-8-streams.html

    • @krab9512
      @krab9512 4 роки тому +1

      Спасибо!

  • @ВладВлад-ж6к
    @ВладВлад-ж6к 2 роки тому

    Лайк.

  • @MrRomanvideo
    @MrRomanvideo 3 роки тому

    Очень сильно напиоминает англоязычное видео Amigoscode :))

  • @danielvai5117
    @danielvai5117 3 роки тому

    Евгений, так , уточнить бы. Вы сказали , чтобы сортировкой пузырька не пользовались, а что лучше ?) Какой алгоритм?

  • @РоманСултанов-с7ъ
    @РоманСултанов-с7ъ 3 роки тому

    Крутотень

  • @FilmicFil
    @FilmicFil 4 роки тому

    Спасибо!

  • @ricciottoinnebbia1333
    @ricciottoinnebbia1333 2 роки тому

    топОрный! Проверочное слово "топОр", а не "тОпор".

  • @Gitarist1111111
    @Gitarist1111111 2 роки тому

    Eugene, смогу ли я под вашим началом написать робота для торговой платформы, которая дает приказы на покупку-продажу в зависимости от новостных API данных , которые приходят с другого сервера ? Я даже не знаю к какому виду программирования это относится, не могли бы мной заняться этой темой? О себе, с математикой, физикой дружу в программировании знаний нет.

  • @kaibrakhmanyelubay2671
    @kaibrakhmanyelubay2671 2 роки тому

    Здравствуйте! можете снять видео с объяснением аннотации в спринге и как можно написать свою)) спасибооооооо

  • @ИльяТарасов-р6ф
    @ИльяТарасов-р6ф 3 роки тому

    Привет по тебе очень хорошо видно, что ты отлично знаешь java. Не можешь подсказать где ты учил этот яп:) буду очень благодарен

  • @abuyasin2931
    @abuyasin2931 2 роки тому

    Евгений, пожалуйста, подскажите, как выглядел бы метод увеличения ЗП каждому сотруднику вдвое со стримами.

  • @m.m.576
    @m.m.576 Рік тому

    Подскажите как можно грамотно обработать -NullPointerException- в рамках представленных стримов?

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

      Если я верно понял вопрос, то
      .orElse
      .ifPresent
      .or

  • @ayrat11
    @ayrat11 4 роки тому

    Спасибо за урок! Вопрос такой не должен ли .iml файл тоже быть в гитигноре?

  • @ВасилийГоловко-д9и

    Спасибо за видео, как всегда супер
    А как вы в идеи увеличиваете шрифт?

    • @EugeneSuleimanov
      @EugeneSuleimanov  4 роки тому

      Спасибо :)
      У меня: CTRL + колесо мыши вперед/назад
      Но, это в настройках нужно включить

  • @caffeinejavacode1475
    @caffeinejavacode1475 4 роки тому +1

    не хватает map и flatmap

  • @adrtalladi2404
    @adrtalladi2404 4 роки тому +1

    Этот видос можно переименовать : сравнение 11 и 7 версии по Stream

  • @alexanderlojhkin8997
    @alexanderlojhkin8997 3 роки тому

    Спасибо за видео конечно, но причем тут 11я java? Stream API добавили не после 8й, а непосредственно в 8й вместе с лямбдами, функциональными интерфейсами, Optional и Date/Time API. В 11й если не ошибаюсь добавили только var для лямбд и что-то еще по мелочи. Вы прежде чем собеседовать людей сами то смотрели что и в какой версии появилось?

    • @EugeneSuleimanov
      @EugeneSuleimanov  3 роки тому

      Вероятнее всего, план в текстовом файле написан не корректно и вводит в заблуждение, но, не могли бы вы скинуть тайминг где я сказал, что функционализмов появилась в 11 версии? Спасибо.

  • @karenkhalatyan137
    @karenkhalatyan137 3 роки тому

    Скажите пожалуйста какие недостатки есть у стримов ?

    • @МихаилА-у3л
      @МихаилА-у3л 8 місяців тому

      Недостаток, растрата памяти на копирование данных, чтобы уложить их в поток

  • @vladimirkrylov4947
    @vladimirkrylov4947 4 роки тому

    List of, если не ошибаюсь, вернёт иммутабильную коллекцию и если в дальнейшем надо в неё добавлять/удалять, то не подходит данный метод

    • @EugeneSuleimanov
      @EugeneSuleimanov  4 роки тому +1

      Да, все верно. Но, в рамках данного примера, нам нужна была именно иммутабельная коллекция.

    • @vladimirkrylov4947
      @vladimirkrylov4947 4 роки тому

      @@EugeneSuleimanov Забыл сказать спасибо за хорошо изложенный материал.

    • @manOfPlanetEarth
      @manOfPlanetEarth 3 роки тому

      @@EugeneSuleimanov
      а почему именно immutable была нужна?

    • @manOfPlanetEarth
      @manOfPlanetEarth 3 роки тому

      @@EugeneSuleimanov
      почему не рассказали про метод comparing? ведь Comparator ассоциируется с реализацией единственного абстрактного метода compare(T o1, T o2).

  • @SA-HOME
    @SA-HOME 4 роки тому

    После 7 версии Java куда-то не туда понесло...

    • @EugeneSuleimanov
      @EugeneSuleimanov  4 роки тому

      Как сказать, на моих проектах - нововведения катастрофически облегчают разработку. Стримы, функциональщина и т.д. А вот отступление от предыдущей модели - это есть, точно :)

  • @Дмитрий_Ник
    @Дмитрий_Ник 3 роки тому

    Автор, удели внимание качеству изображения.. фокусировка происходит минутами.. неужели нельзя пересмотреть свое же видео перед тем как выложить.

  • @guugle
    @guugle 2 роки тому

    сильно надеюсь, что мы никогда не станем коллегами.

  • @alexander_brun
    @alexander_brun 3 роки тому

    убрать пурум-пурум из речи и будет нормально

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

    Лично я уже забыл, когда в прод деливерил код без StreamAPI =) я когда вижу не стрим код в обычной бизнес логике (не перфоменсной), принимаю его как legacy

  • @Sultan-ym6lo
    @Sultan-ym6lo 2 роки тому

    Привет! А можно этого кода в Рэпо ? Если есть как тебя там найти ?

  • @faniskhalikov9736
    @faniskhalikov9736 2 роки тому

    С удовольствием пересматриваю данное видео и возник вопрос: насколько мы теряем в скорости, когда применяем стримы? Критично ли это при работе с большими коллекциями?

    • @EugeneSuleimanov
      @EugeneSuleimanov  2 роки тому +1

      Есть хорошая статья:
      dzone.com/articles/java-performance-for-looping-vs-streaming
      В целом, на современных JVM и оборудовании - без разницы :)
      Но, в каждом конкретном случае нужно замерять самому для проверки.

    • @faniskhalikov9736
      @faniskhalikov9736 2 роки тому

      @@EugeneSuleimanov Спасибо!

  • @ivanyuyukin1947
    @ivanyuyukin1947 4 роки тому +1

    Спасибо за видео. Использование стримов на много увеличивает производительность программы или это больше для красоты?

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

      Стримы медленнее, но вы этого, скорее всего, даже не заметите.

  • @Алексей-у9ж3ф
    @Алексей-у9ж3ф 3 роки тому

    Комментарий для развития канала)
    Спасибо вам!

  • @Mr.J248
    @Mr.J248 4 роки тому

    Начал переписывать в IDEA Ваш код и наткнулся на кучу красных подчеркиваний (SDK 11 использую, а вот project language level также 11). Может нужен другой project level?. Спасибо за ценные знания.

    • @Mr.J248
      @Mr.J248 4 роки тому

      нашел еще 2 класа Specialist и Specialty и все встало на свои места

  • @slevinkelebra3738
    @slevinkelebra3738 4 роки тому

    Здорово! Мне понравилось изложение материала. Я сейчас как раз изучаю Java и не так давно проходил Streamы, и в вашем видео было всё понятно, за одно повторил их немного.

  • @Стрижков
    @Стрижков 3 роки тому

    Время 14:56. Строка 48: matchAnyEnginner -> matchAnyEngineer

    • @EugeneSuleimanov
      @EugeneSuleimanov  3 роки тому +1

      Спасибо за подсказку. Пропустил опечатку.

    • @Стрижков
      @Стрижков 3 роки тому

      @@EugeneSuleimanov Даже не надеялся, что вы прочтете мой комментарий на столь давнем видео =)
      Очень помогают ваши видео, спасибо!

    • @EugeneSuleimanov
      @EugeneSuleimanov  3 роки тому

      @@Стрижков спасибо за отзыв

  • @Alexander-is1eq
    @Alexander-is1eq 3 роки тому

    Спасибо большое. Очень нужное видео. Все понятно и по делу.

  • @phil2964
    @phil2964 4 роки тому

    Супер, все очень доходчиво 👍

  • @Taluksya
    @Taluksya 4 роки тому

    что за дичь? в java 8 уже был Arrays.asList, функциональные интерфейсы появились не после java 8, а в ней же они и появились! кстати для перечислений лучше использовать равенство. Удивительный человек сам не знает что нового где добавили но собеседует и критикует других людей

    • @EugeneSuleimanov
      @EugeneSuleimanov  4 роки тому +4

      Да, вы правы, изменение в компараторе было в java 8. Не хотел и показаться бестактным и
      критиковать. Но, List.of точно появилось после 8 версии :)

    • @EugeneSuleimanov
      @EugeneSuleimanov  4 роки тому +10

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