Java Stream API: функционально, модно, молодёжно!

Поділитися
Вставка
  • Опубліковано 5 лют 2019
  • Java Stream API: функциональный подход к работе с коллекциями в Java 8+. Продвинутые методы работы с коллекциями.
    Содержание ниже
    Казалось бы, чего такого можно придумать в обработке коллеций: взяли и обошли в цикле, но нет. Если мы взглянем в те же популярные JavaScript, ruby, python или более близкие JVM языки, то увидим, что можно жить проще, писать меньше кода и получать более читабельные обработчики. Инженеры из Oracle напрягли мозги и осчастливили миллионы разработчиков во всём мире. Присоединимся же и мы к всеобщей радости, кратко ознакомившись с этим замечательным API.
    Код из видео:
    github.com/drucoder/javalearn...
    Хорошая статья по теме (спасибо Чеширу, что нашёл и поделился в чатике):
    annimon.com/article/2778
    Видео про Lombok:
    • Java Tools: Project Lo...
    СОДЕРЖАНИЕ
    • Java Stream API: функц... Стримы из объектов файловой системы
    • Java Stream API: функц... Files.lines()
    • Java Stream API: функц... Files.list()
    • Java Stream API: функц... Files.walk()
    • Java Stream API: функц... Стримы из примитивов
    • Java Stream API: функц... IntStream
    • Java Stream API: функц... DoubleStream
    • Java Stream API: функц... IntStream.range()
    • Java Stream API: функц... IntStream.rangeClosed()
    • Java Stream API: функц... Arrays.stream()
    Стримы из объектов
    • Java Stream API: функц... Stream.of(Object)
    • Java Stream API: функц... Stream.builder()
    • Java Stream API: функц... Collection.stream()
    • Java Stream API: функц... Collection.parallelStream()
    • Java Stream API: функц... Stream.generate()
    • Java Stream API: функц... Stream.iterate()
    • Java Stream API: функц... Stream.concat()
    Терминальные операции
    • Java Stream API: функц... Stream.count()
    • Java Stream API: функц... Stream.forEach()
    • Java Stream API: функц... Collection.forEach()
    • Java Stream API: функц... Stream.forEachOrdered()
    • Java Stream API: функц... Stream.collect()
    • Java Stream API: функц... Stream.toArray()
    • Java Stream API: функц... Stream.collect(toMap())
    • Java Stream API: функц... IntStream.reduce()
    • Java Stream API: функц... Stream.reduce()
    • Java Stream API: функц... IntStream.average(), IntStream.max(), IntStream.min(), IntStream.sum(), IntStream.summaryStatictics()
    • Java Stream API: функц... Stream.max(), Stream.min()
    • Java Stream API: функц... Stream.findAny(), Stream.findFirst()
    • Java Stream API: функц... Stream.noneMatch()
    • Java Stream API: функц... Stream.anyMatch()
    • Java Stream API: функц... Stream.allMatch()
    • Java Stream API: функц... Трансформации стримов
    • Java Stream API: функц... IntStream.mapToLong()
    • Java Stream API: функц... IntStream.mapToObj()
    • Java Stream API: функц... IntStream.distinct()
    • Java Stream API: функц... Stream.filter()
    • Java Stream API: функц... Stream.skip()
    • Java Stream API: функц... Stream.limit()
    • Java Stream API: функц... Stream.sorted()
    • Java Stream API: функц... Stream.map()
    • Java Stream API: функц... Stream.peek()
    • Java Stream API: функц... Stream.takeWhile()
    • Java Stream API: функц... Stream.dropWhile()
    • Java Stream API: функц... Stream.flatMap()
    • Java Stream API: функц... Примеры использования
    ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
    ➡ Твиттер: / letscodedru
    ➡ Группа Вконтакте: letscodedru
    ➡ Канал в Telegram: t.me/letsCode_dru
    ➡ Чат в Telegram: t.me/joinchat/FeiP9xEhqHajfqh...
    ➡ Сервер в Discord: / discord
    ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
    Поддержать проект:
    ➡ Patreon / letscodedru
    ➡ Яндекс.Деньги money.yandex.ru/to/4100145167...
    ➡ PayPal paypal.me/letscodedru
    ➡ Qiwi qiwi.me/letscode
    ➡ WebMoney/BitCoin funding.webmoney.ru/d/drucoder
    ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
    ➡ Ссылка на канал: www.youtube.comwww.yo...
    ➡ Ссылка на Яндекс.Дзен: zen.yandex.ru/media/id/5ac209...

КОМЕНТАРІ • 104

  • @letsCodeDru
    @letsCodeDru  5 років тому +34

    СОДЕРЖАНИЕ
    0:52 Стримы из объектов файловой системы
    0:55 Files.lines()
    1:11 Files.list()
    1:20 Files.walk()
    1:50 Стримы из примитивов
    2:02 IntStream
    2:12 DoubleStream
    2:23 IntStream.range()
    2:42 IntStream.rangeClosed()
    2:54 Arrays.stream()
    Стримы из объектов
    3:11 Stream.of(Object)
    3:35 Stream.builder()
    3:54 Collection.stream()
    4:15 Collection.parallelStream()
    4:45 Stream.generate()
    5:37 Stream.iterate()
    6:26 Stream.concat()
    Терминальные операции
    7:15 Stream.count()
    7:20 Stream.forEach()
    7:52 Collection.forEach()
    8:04 Stream.forEachOrdered()
    8:27 Stream.collect()
    8:51 Stream.toArray()
    8:56 Stream.collect(toMap())
    9:40 IntStream.reduce()
    10:06 Stream.reduce()
    12:21 IntStream.average(), IntStream.max(), IntStream.min(), IntStream.sum(), IntStream.summaryStatictics()
    12:44 Stream.max(), Stream.min()
    13:09 Stream.findAny(), Stream.findFirst()
    13:35 Stream.noneMatch()
    14:02 Stream.anyMatch()
    14:13 Stream.allMatch()
    15:01 Трансформации стримов
    15:08 IntStream.mapToLong()
    15:19 IntStream.mapToObj()
    15:52 IntStream.distinct()
    16:08 Stream.filter()
    16:29 Stream.skip()
    16:34 Stream.limit()
    17:26 Stream.sorted()
    17:45 Stream.map()
    18:01 Stream.peek()
    18:46 Stream.takeWhile()
    19:25 Stream.dropWhile()
    21:20 Stream.flatMap()
    23:49 Примеры использования

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

      добавь в описание 0:00 Старт и тайм-коды попадут на ленту видео

  • @victormog
    @victormog 5 років тому +45

    *Отличное наглядное пособие по Stream!*
    Для полноты картины только, можно было бы в начале сказать, что такое Stream...

    • @letsCodeDru
      @letsCodeDru  5 років тому +11

      Внезапно не подумал, что кто-то не знает. Зашоренность. :)

    • @victormog
      @victormog 5 років тому +1

      @@letsCodeDru
      Не знает - ладно. Я до сих пор stream ассоциирую с С-шными потоками...

    • @kunnilinux
      @kunnilinux 5 років тому +9

      @@letsCodeDru плюсую, может, в видео про лямбды пройдетесь по определениям стримов и лямбд одним махом?

  • @user-sd4bw9gh1l
    @user-sd4bw9gh1l 2 роки тому +5

    Лучшее видео по стрим апи, которое я видел. Было бы классно углубится в эту тему и ещё рассказать про функциональные интерфейсы. Часто спрашивают на собеседованиях именно о них)

  • @dmitrymukhin9458
    @dmitrymukhin9458 5 років тому +6

    Спасибо большое!! Даешь очень просто приложения по Spring Cloud!! =))

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

    Чрезвычайно содержательное видео! Все подробно и без ошибок, эканий и бэканий. За таймкоды в описании отдельное спасибо!

  • @mr_robot_20_04
    @mr_robot_20_04 5 років тому +1

    Годные и информативные видосы, спасибо за контент! Было бы здорово увидеть туториал по Spring security в вашем исполнении) Желательно более углубленно и информативно нежели уже есть на канале

  • @user-pw9ln6mr7c
    @user-pw9ln6mr7c 5 років тому +22

    Очень полезное видео, спасибо!

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

    видео изумительно) спасибо! Жду новых видео по Java

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

    Отличная демонстрация Stream API, с удовольствием посмотрел бы еще по Optional

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

    Круть! Концентрация полезности зашкаливает )) При этом доступность и изложение инфы на высоте

  • @kunnilinux
    @kunnilinux 5 років тому +3

    Большое спасибо за видео!!! Даже не знаю, как еще выразить благодарность. Дело в том, что я джун в компании, устроился совсем недавно, и темы ваших роликов как раз совпадают с изучаемыми мной темами.

  • @D.P._
    @D.P._ 4 роки тому +2

    Как-то пропустил) Крутой видос, и реально полезный! Исправляюсь: Like as usual!

  • @user-rg1jw3xq7b
    @user-rg1jw3xq7b 5 років тому +3

    одна из самых актуальных тем, спасибо!

  • @eugenekotsaba6512
    @eugenekotsaba6512 4 роки тому +5

    это самое содержательное видео на ютубе , лайк)

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

    Спасибо, очень полезное видео, большой охват информации о применении стримов. 👍

  • @user-arbuzer1133
    @user-arbuzer1133 3 роки тому

    Спасибо БОЛЬШОЕ за видео! Пока что не понятно как работает эта тёмная магия)) Нужно ещё погонять этот ролик speed 0,1))

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

    Очень качественное, информативное объяснение!

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

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

  • @user-zy1km1px6d
    @user-zy1km1px6d 4 роки тому +1

    Просто здорово. Спасибо за труд.

  • @tomozi1
    @tomozi1 5 років тому +1

    Спасибо за превосходные видео!

  • @ZhivaPR
    @ZhivaPR 5 років тому +2

    Хорошая подача, спасибо.

  • @Kepchyk1101
    @Kepchyk1101 7 місяців тому

    Очень позновательно, быстро и без воды. Не как вот эти: а сегодня мы бе ме ге, аааа, еее. 👍🏻

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

    Спасибо за урок!

  • @Sergey111111
    @Sergey111111 5 років тому +7

    Очень круто, кратко и емко!

  • @iryna6389
    @iryna6389 5 років тому +1

    Привет, огромное спасибо за видео.

  • @ievgengrozenok1803
    @ievgengrozenok1803 5 років тому +1

    Спасибо! Все было понятно

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

    Очень круто! Спасибо!

  • @user-cv1xd9vb4f
    @user-cv1xd9vb4f 5 років тому

    Прикольная штука. Недавно узнал об akka-streams, по документации можно более наглядно посмотреть и понять для чего они вообще нужны. +back pressure

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

    Шикарное видео! Спасибо

  • @user-pi3mv8vq6e
    @user-pi3mv8vq6e 4 роки тому +10

    Сначала было тяжело понимать, потом скорость 0,75 поставил и класс. Осталось заставить себя перейти с циклов на стримы, чтобы практикой это все закрепить

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

      codewars например хорошо помогает

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

      спасибо за идею про скорость! реально нормально стало! автор на спидах)))

    • @user-fj3rr9mi4x
      @user-fj3rr9mi4x 2 роки тому +1

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

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

      @@user-fj3rr9mi4x речь шла о parallel stream.

  • @taraskutselya1326
    @taraskutselya1326 5 років тому +6

    То что надо! Лайк, подписка, колокольчик (вру... давно подписан 😀)

  • @way2play980
    @way2play980 3 місяці тому

    Спасибо, очень интересно!

  • @user-eg2fx6si6i
    @user-eg2fx6si6i 5 років тому +2

    Спасибо)

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

    хороший урок!

  • @romantsyupryk3009
    @romantsyupryk3009 5 років тому

    Thank you so much.

  • @Peter-jp9zw
    @Peter-jp9zw 5 років тому +2

    ты классный, спасибо тебе)

  • @user-ce3lm7sz1k
    @user-ce3lm7sz1k 4 роки тому +6

    супер! мне (как тупому) ничего не понятно, но кажется что объяснение хорошее!)

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

      Это норма. Я учебные видосы и статьи тоже по несколько раз пересматриваю/перечитываю

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

      @@letsCodeDru дорогу осилит идущий

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

    Оче6нь информативною. Спасибо

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

    Годно! Спасибо

  • @margulankurmangaly9150
    @margulankurmangaly9150 5 років тому +2

    По твоим видосам устроился на работу)))))))) Спасибо за годноту

    • @letsCodeDru
      @letsCodeDru  5 років тому +9

      Рад, что имею к этому отношение. Проставляйся с первой ЗП, реквизиты под каждым видео 😅

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

    Пушка!

  • @mercurial-flower
    @mercurial-flower 2 роки тому

    Класс!

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

    Вы конечно извините, но это лайк и подписка..

  • @shtan5583
    @shtan5583 5 років тому +1

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

  • @K4sik
    @K4sik 5 років тому

    Видео очень полезное, но будут уроки по Spring Boot с использованием JavaScript и framework Ajax, JQuery ......?

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

    Видео хорошее, только ваш обход списка работает, если самая корневая нода (у которой нет родителя) находится под первым индексом в списке, иначе она будет будет рекурсивно передаваться как аргумент чайлд департамента и дерево не сможет создаться, так как у нескольких департаментов не будет родителей

  • @moovestone
    @moovestone Місяць тому

    спасибо. только это походу для тех, кто уже работает разработчиком, а не изучает)

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

    Например, моднейшее написание стримов, например 😃

  • @user-il1dr9wi8h
    @user-il1dr9wi8h Рік тому

    like!

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

    2:15
    Ребят, обертки только для double,long,int - и все!
    Никаких "boolean и так далее" - нет.

  • @pvtitov
    @pvtitov 3 роки тому +7

    боже чтоже так быстро то у меня сейчас голова взорвется, можно тоже самое но 10 видео продолжительностью как это? XD

    • @koKS.1k
      @koKS.1k 3 роки тому +2

      Скорость воспроизведения х0,75 и всё четко (=

  • @user-wh8ye3id7s
    @user-wh8ye3id7s 2 роки тому

    Голова задымилась😁

    • @user-wh8ye3id7s
      @user-wh8ye3id7s 2 роки тому

      Спасибо автор! Огромная работа проделана и всего в 27 минут вложили! Искусство!

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

    2:12 у меня комбинация Ctrl+Alt+Shift почему то не работает на Винде, может какая то другая комбинация по умолчанию?

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

    😀

  • @kunnilinux
    @kunnilinux 5 років тому +1

    Что можете сказать по поводу производительности стримов в сравнении со старыми подходами? Например, что быстрее, конвертировать коллекцию доменов в коллекцию ДТО через фор-ич или через стрим апи? В чем сок использования для простых операций? Только лишь в читабельном и компактном коде?

    • @kunnilinux
      @kunnilinux 5 років тому +1

      я сразу поясню, я новичок и я как раз из тех "староверов", которые все до сих пор делают в циклах, ибо так научился изначально, а чтобы постичь новое, надо сперва понять преимущества нового над старым

    • @maksiml6298
      @maksiml6298 5 років тому

      Компактность. Big O не зависит что используется, и там и там возможно медленная скорость.

    • @h00per12
      @h00per12 5 років тому +1

      Вообще не факт что стримы медленнее, может там под капотом jvm как-то оптимизирует это дело. И даже если и медленнее, то вопрос только в том что тебе нужно читабельный код или производительность. По дефолту на первом месте читабельный код, а декларативный подход(функциональщина, стримы) проще читать нежели императивный(циклы). Очень узкий кейс должен быть, когда ты не юзаешь стримы ради производительности, возможно, тебе тогда вообще не стоит писать на java, если тебе нужна производительность, посмотри в сторону С++, например.

    • @andrewcool482
      @andrewcool482 5 років тому

      blog.jooq.org/2015/12/08/3-reasons-why-you-shouldnt-replace-your-for-loops-by-stream-foreach/

  • @MaksymVashchenko
    @MaksymVashchenko 5 років тому +6

    Раз ты стримы затронул, может и лямды уже добьешь туда сразу?)

    • @letsCodeDru
      @letsCodeDru  5 років тому +8

      Угу. Запланировано ужо.

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

      @@letsCodeDru Спасибо за супер-видос! А лямбды выйдут? :)

  • @almasabdrazak5089
    @almasabdrazak5089 5 років тому +2

    Стримы от io ресурсов , таких как файл, нужно явно закрывать или оборачивать в try with resources

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

    10:50 Пример с reduce() и рекурсией пришлось пересматривать несколько раз пока усвоил. Это нормально? :D

    • @letsCodeDru
      @letsCodeDru  3 роки тому +3

      Чтобы понять рекурсию, нужно понять рекурсию

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

    Я может немного туплю, но как так получается что вы просто пишете вызов стрима(или любого метода), а идея сама дополняет тем, что кладет его в переменную с нужным обозначением вида? Пока я не объявлю новую переменную, я не могу вызвать Stream.of или что-то другое

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

      ctrl+alt+v и идея сама засунет все в переменную если это возможно

  • @b213videoz
    @b213videoz 12 днів тому

    Hipster stuff

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

    ребята, подскажите сочетание клавиш на 9:34 )

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

    что это за тема в идеи?

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

      Darcula

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

      letsCode спасибо! странно, она выглядит совсем не так как у меня ( наверное от ОС зависит

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

    Скорость понимания видео рассчитана как минимум на мидла

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

    Джава, а не ява!!!

  • @ZeBatua
    @ZeBatua 3 місяці тому

    Видео для тех, кто уже что-то знает про стримы. Я вообще ничего не понял. Куда то летит, миллион всего объясняет. 0 шансов запомнить и тем более понять

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

    Классно. Но ничего не понятно )

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

    2430

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

    ява - это мотоцикол. А язык программирования - это джава.

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

    Какая нафиг Ява?))) ничего что создатели языка называют ее джава?)))

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

      Еще за запятые его поругайте : ай яй яй, дядя Андрей, такой бАльшой и усатый, а все "ошибаешся"

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

      Иван Иванов спасибо, надо щемить лоха и за запястья

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

      @@dv5686 как то странно слышать спасибо, после сарказма.

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

      Иван Иванов сарказм, который мы заслужили:)))

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

    Самого интересного нет.

  • @Youtooobo
    @Youtooobo 6 місяців тому

    Ужасное объяснение.