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...
СОДЕРЖАНИЕ
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 Примеры использования
добавь в описание 0:00 Старт и тайм-коды попадут на ленту видео
*Отличное наглядное пособие по Stream!*
Для полноты картины только, можно было бы в начале сказать, что такое Stream...
Внезапно не подумал, что кто-то не знает. Зашоренность. :)
@@letsCodeDru
Не знает - ладно. Я до сих пор stream ассоциирую с С-шными потоками...
@@letsCodeDru плюсую, может, в видео про лямбды пройдетесь по определениям стримов и лямбд одним махом?
Лучшее видео по стрим апи, которое я видел. Было бы классно углубится в эту тему и ещё рассказать про функциональные интерфейсы. Часто спрашивают на собеседованиях именно о них)
Спасибо большое!! Даешь очень просто приложения по Spring Cloud!! =))
Чрезвычайно содержательное видео! Все подробно и без ошибок, эканий и бэканий. За таймкоды в описании отдельное спасибо!
Годные и информативные видосы, спасибо за контент! Было бы здорово увидеть туториал по Spring security в вашем исполнении) Желательно более углубленно и информативно нежели уже есть на канале
Очень полезное видео, спасибо!
видео изумительно) спасибо! Жду новых видео по Java
Отличная демонстрация Stream API, с удовольствием посмотрел бы еще по Optional
Круть! Концентрация полезности зашкаливает )) При этом доступность и изложение инфы на высоте
Большое спасибо за видео!!! Даже не знаю, как еще выразить благодарность. Дело в том, что я джун в компании, устроился совсем недавно, и темы ваших роликов как раз совпадают с изучаемыми мной темами.
Как-то пропустил) Крутой видос, и реально полезный! Исправляюсь: Like as usual!
одна из самых актуальных тем, спасибо!
это самое содержательное видео на ютубе , лайк)
Спасибо, очень полезное видео, большой охват информации о применении стримов. 👍
Спасибо БОЛЬШОЕ за видео! Пока что не понятно как работает эта тёмная магия)) Нужно ещё погонять этот ролик speed 0,1))
Очень качественное, информативное объяснение!
Спасибо. Отличный урок!
Просто здорово. Спасибо за труд.
Спасибо за превосходные видео!
Хорошая подача, спасибо.
Очень позновательно, быстро и без воды. Не как вот эти: а сегодня мы бе ме ге, аааа, еее. 👍🏻
Спасибо за урок!
Очень круто, кратко и емко!
и четко)
Привет, огромное спасибо за видео.
Спасибо! Все было понятно
Очень круто! Спасибо!
Прикольная штука. Недавно узнал об akka-streams, по документации можно более наглядно посмотреть и понять для чего они вообще нужны. +back pressure
Шикарное видео! Спасибо
Сначала было тяжело понимать, потом скорость 0,75 поставил и класс. Осталось заставить себя перейти с циклов на стримы, чтобы практикой это все закрепить
codewars например хорошо помогает
спасибо за идею про скорость! реально нормально стало! автор на спидах)))
Я как изучил стримы тоже везде их лепил, а оказывается, как отметил автор, только в больших коллекциях получается выигрыш в производительности.
@@user-fj3rr9mi4x речь шла о parallel stream.
То что надо! Лайк, подписка, колокольчик (вру... давно подписан 😀)
Спасибо, очень интересно!
Спасибо)
хороший урок!
Thank you so much.
ты классный, спасибо тебе)
супер! мне (как тупому) ничего не понятно, но кажется что объяснение хорошее!)
Это норма. Я учебные видосы и статьи тоже по несколько раз пересматриваю/перечитываю
@@letsCodeDru дорогу осилит идущий
Оче6нь информативною. Спасибо
Годно! Спасибо
По твоим видосам устроился на работу)))))))) Спасибо за годноту
Рад, что имею к этому отношение. Проставляйся с первой ЗП, реквизиты под каждым видео 😅
Пушка!
Класс!
Вы конечно извините, но это лайк и подписка..
Стримы топ, но пользоваться ими без документации я почему-то не могу. Куча похожих методов и подводных камней.
Видео очень полезное, но будут уроки по Spring Boot с использованием JavaScript и framework Ajax, JQuery ......?
Видео хорошее, только ваш обход списка работает, если самая корневая нода (у которой нет родителя) находится под первым индексом в списке, иначе она будет будет рекурсивно передаваться как аргумент чайлд департамента и дерево не сможет создаться, так как у нескольких департаментов не будет родителей
спасибо. только это походу для тех, кто уже работает разработчиком, а не изучает)
Например, моднейшее написание стримов, например 😃
like!
2:15
Ребят, обертки только для double,long,int - и все!
Никаких "boolean и так далее" - нет.
боже чтоже так быстро то у меня сейчас голова взорвется, можно тоже самое но 10 видео продолжительностью как это? XD
Скорость воспроизведения х0,75 и всё четко (=
Голова задымилась😁
Спасибо автор! Огромная работа проделана и всего в 27 минут вложили! Искусство!
2:12 у меня комбинация Ctrl+Alt+Shift почему то не работает на Винде, может какая то другая комбинация по умолчанию?
😀
Что можете сказать по поводу производительности стримов в сравнении со старыми подходами? Например, что быстрее, конвертировать коллекцию доменов в коллекцию ДТО через фор-ич или через стрим апи? В чем сок использования для простых операций? Только лишь в читабельном и компактном коде?
я сразу поясню, я новичок и я как раз из тех "староверов", которые все до сих пор делают в циклах, ибо так научился изначально, а чтобы постичь новое, надо сперва понять преимущества нового над старым
Компактность. Big O не зависит что используется, и там и там возможно медленная скорость.
Вообще не факт что стримы медленнее, может там под капотом jvm как-то оптимизирует это дело. И даже если и медленнее, то вопрос только в том что тебе нужно читабельный код или производительность. По дефолту на первом месте читабельный код, а декларативный подход(функциональщина, стримы) проще читать нежели императивный(циклы). Очень узкий кейс должен быть, когда ты не юзаешь стримы ради производительности, возможно, тебе тогда вообще не стоит писать на java, если тебе нужна производительность, посмотри в сторону С++, например.
blog.jooq.org/2015/12/08/3-reasons-why-you-shouldnt-replace-your-for-loops-by-stream-foreach/
Раз ты стримы затронул, может и лямды уже добьешь туда сразу?)
Угу. Запланировано ужо.
@@letsCodeDru Спасибо за супер-видос! А лямбды выйдут? :)
Стримы от io ресурсов , таких как файл, нужно явно закрывать или оборачивать в try with resources
или аналогичной структуре
10:50 Пример с reduce() и рекурсией пришлось пересматривать несколько раз пока усвоил. Это нормально? :D
Чтобы понять рекурсию, нужно понять рекурсию
Я может немного туплю, но как так получается что вы просто пишете вызов стрима(или любого метода), а идея сама дополняет тем, что кладет его в переменную с нужным обозначением вида? Пока я не объявлю новую переменную, я не могу вызвать Stream.of или что-то другое
ctrl+alt+v и идея сама засунет все в переменную если это возможно
Hipster stuff
ребята, подскажите сочетание клавиш на 9:34 )
возможно ctrl+alt+enter на винде.
что это за тема в идеи?
Darcula
letsCode спасибо! странно, она выглядит совсем не так как у меня ( наверное от ОС зависит
Скорость понимания видео рассчитана как минимум на мидла
Джава, а не ява!!!
Ойфсё
Видео для тех, кто уже что-то знает про стримы. Я вообще ничего не понял. Куда то летит, миллион всего объясняет. 0 шансов запомнить и тем более понять
Классно. Но ничего не понятно )
2430
ява - это мотоцикол. А язык программирования - это джава.
Какая нафиг Ява?))) ничего что создатели языка называют ее джава?)))
Еще за запятые его поругайте : ай яй яй, дядя Андрей, такой бАльшой и усатый, а все "ошибаешся"
Иван Иванов спасибо, надо щемить лоха и за запястья
@@dv5686 как то странно слышать спасибо, после сарказма.
Иван Иванов сарказм, который мы заслужили:)))
Самого интересного нет.
Ужасное объяснение.