Вікіпідручник ukwikibooks https://uk.wikibooks.org/wiki/%D0%93%D0%BE%D0%BB%D0%BE%D0%B2%D0%BD%D0%B0_%D1%81%D1%82%D0%BE%D1%80%D1%96%D0%BD%D0%BA%D0%B0 MediaWiki 1.47.0-wmf.16 first-letter Медіа Спеціальна Обговорення Користувач Обговорення користувача Вікіпідручник Обговорення Вікіпідручника Файл Обговорення файлу MediaWiki Обговорення MediaWiki Шаблон Обговорення шаблону Довідка Обговорення довідки Категорія Обговорення категорії Полиця Обговорення полиці Рецепт Обговорення рецепта Субтитри Обговорення субтитрів Модуль Обговорення модуля Подія Обговорення події Рецепт:Сирники 102 3276 41447 37864 2026-08-20T06:02:51Z Heffalump1974 3591 шаблон 41447 wikitext text/x-wiki '''Си́рник''' (від слова [[w:Сир|сир]])&nbsp;— корж із сиром і приправами. [[Файл:Сирники.JPG|thumb|right|Сирники]] {{Вікіпедія|Сирники}} === Склад === * 500 г сиру * 1/2 склянки борошна * 1 яйце * 3 столові ложки цукру * ванілін * сіль за смаком. Для фаршу: 100 г варення, 50 г родзинок. === Приготування === # Сир пропустити через м'ясорубку, додати борошно, яйце, цукор, ванілін, розтерти до утворення однорідної маси і сформувати коржі вагою по 35-40 г. # Для приготування фаршу варення змішати з родзинками і варити до утворення густої маси. # Розкласти на коржі фарш, завернути, надаючи їм овальної форми, обкачати у білих сухарях і смажити у фритюрі. Потім поставити на 3-5 хвилин у духовку. Подаючи на стіл, сирники посипати цукровою пудрою. Окремо подати сметану. {{Українська кухня}} [[Категорія:Рецепти]] hsptcloacqu1haefqo5rop9zw256umq Рецепт:Медовик 102 4620 41446 38341 2026-08-20T06:02:32Z Heffalump1974 3591 шаблон 41446 wikitext text/x-wiki [[File:Beskidische_Honigkuchen,_Sanok.JPG|thumb]] '''Медівни́к''' або '''медови́к''' — пиріг, який готують з додаванням меду. {{Вікіпедія|Медівник (пиріг)}} '''Інгредієнти:''' * - 100 г вершкового масла * - 4 яйця * - 2 ст.л. меду * - 1 склянка цукру * - Борошно 2 склянки + на розкочування * - 2 ч.л. без гірки соди '''Крем:''' * - Сметана +-700 г * - 1.5 склянки цукру. '''Приготування:''' Кладемо в миску вершкове масло, яйця, мед, 1 склянка цукру - і ставимо все це справа на водяну баню на 7 хвилин (постійно помішуючи), далі додаємо борошно + соду, не перестаючи заважати і ще 7 хв на бані. Потім викладаємо наше тісто на стіл - нехай остигає. Як стало злегка теплим ділимо на 12 частин, можна і більше зробити частин, залежить від вашої любові тонко розкачувати тісто! Рекомендую відразу все розкачати, а потім вже випікати, тому, що випікаються коржики дуже швидко, буквально 30 секунд-1 хвилину. Можна зробити виделкою проколи. Температура випікання близько 160 градусів. Обрізку країв робимо відразу, поки теплі ще, з обрізків робимо крихту для обсипання. Збиваємо крем сметанка + цукор близько 2-3 хвилини, укладаємо коржі один на дружку рясно змащуючи коржі. Можна додати горіхи волоські між шарами. ''Дати настоятися тортику ніч і приємного апетиту!'' {{Українська кухня}} [[Категорія:Рецепти]] [[Категорія:Випічка]] 2csv9wir1aawrae32s68djweab3s4hx Рецепт:Капусняк 102 7250 41426 38335 2026-08-20T05:55:59Z Heffalump1974 3591 шаблон 41426 wikitext text/x-wiki == Капусняк звичайний == Зварити з свинини [[w:юшка|юшку]], процідити її, додати промиту та порізану [[w:квашена капуста|кислу капусту]] і варити, поки не пом'якшає. Заправити [[w:борошно|борошном]] з [[w:цибуля|цибулею]] і [[w:масло|маслом]], [[w:Перець чорний|поперчити]] і подавати. Коли хочуть мати капусняк пісним, то варять юшку з [[w:коріння|коріння]] та [[w:гриби|грибів]]. {{Вікіпедія|Капусняк}} === Капусняк з копченою полядвицею === Шматок копченої свиної [[w:полядвиця|полядвиці]] з кісточкою ([[w:бочок|бочок]]) промити, покласти до каструлі, залити свіжою водою та поставити на вогонь. : [[Файл:Kapustnjak1.jpg|230px]] Як почне кипіти, зняти піну. Тим часом почистити і порізати [[w:картопля|картоплю]] та одну цибулину. : [[Файл:Kapustnjak81.jpg|230px]] Промити [[w:квашена капуста|квашену капусту]] в проточній воді. Сильно кисла капуста буде довго варитися. Коли м'ясо розм'якне, всипати порізану картоплю. Коли вона зваритися, всипати промиту капусту, влити пів-склянки [[w:сметана|сметани]] та розмішати. : [[Файл:Kapustnjak 007.jpg|230px]] Варити до готовності капусти. Тим часом порізати [[w:сало|сало]] невеликими кубиками та розтопити на розігрітій сковорідці, всипати посічену цибулю та обсмажити до золотистого кольору. : [[Файл:Kapustnjak 012.jpg|230px]] Покришити зелень [[w:кріп|кропу]], цибулі та [[w:петрушка|петрушки]]. : [[Файл:Kapustnjak 010.jpg|230px]] Коли капуста стане м'якою, вийняти м'ясо та порізати його на порційні шматки. : [[Файл:Kapustnjak33.jpg|230px]] Всипати покришену зелень, дати покипіти хвильку. : [[Файл:Kapustnjak 011.jpg|230px]] Заправити капусняк засмаженою цибулею зі [[w:шкварки|шкварками]], якщо треба посолити до смаку. : [[Файл:Kapustnjak 014.jpg|230px]] При подачі до столу положити в тарілку порційний шматок м'яса та подати до капусняку сметану. : [[Файл:Kapustnjak 017.jpg|230px]] == Капусняк з гарбузом<ref>{{Cite web|url=https://klopotenko.com/uk/kapusnjak-z-garbuzom/|title=Капусняк з гарбузом|last=|first=Євген Клопотенко|date=|website=|publisher=|language=Українська|accessdate=}}</ref> == # Розігрійте каструлю з подвійним дном, викладіть в неї очищені від шкірки овочі (морква і цибуля) і злегка обсмажте. # Залийте водою (1500 мл), додайте спеції (лавровий лист і запашний перець за смаком) і варіть бульйон 30 хвилин. # Процідіть бульйон. # Додайте перлову крупу (1 ст. л.) і варіть 20 хвилин. # Додайте тонко нашатковану капусту (150 г) і шматочки бекону (120 г). # Посоліть, додайте нарізану кубиком гарбуз (60 г) і варіть капусняк до готовності гарбуза. == Капусняк з грибами<ref>{{Cite web|url=https://klopotenko.com/uk/kapustnyak-z-gribamy/|title=Капусняк з грибам|last=|first=Євген Клопотенко|date=|website=|publisher=|language=Українська|accessdate=}}</ref> == # Зберіть усі необхідні інгредієнти для капустняка та печериці. # Картопля (3 шт.) почистіть і поріжте невеликими кубиками. Викладіть в каструлю відповідного розміру, залийте 2 л води, додайте 2 шт. лаврового листа і 3 горошини запашного перцю. Поставте варитися на середньому вогні. Залежно від того, якої густоти суп вам подобається, ви можете трохи зменшити або збільшити кількість картоплі. # На розігріту сковорідку викладіть 50 г сала, попередньо очищеного від шкіри і порізаного невеликими смужками. Дайте салу трохи стопитися - не більше 2 хвилин на невеликому вогні. # Додайте на сковорідку із салом одну цибулину, порізану дрібними кубиками, і 1 зубчик часнику, нарізаний пластинками. Обсмажуйте протягом декількох хвилин, поки цибуля не стане прозорою. # Печериці (200 г) помийте і поріжте невеликими шматочками. Додайте гриби в сковорідку з обсмаженою цибулею і тушкуйте протягом 3-4 хвилин на середньому вогні. # Квашену капусту (500 г) додайте на сковорідку з овочевою піджаркою і тушкуйте 4-5 хвилин. В кінці приготування додайте 1 ч. л. сухих пряних трав на ваш смак. # Додайте овочеву піджарку в каструлю з картоплею, приправте сіллю за смаком і варіть ще 5 хвилин. Зніміть з вогню і дайте трохи настоятися. Подавайте зі сметаною. == Як подавати == Капусняки подають зі сметаною й посипають подрібненою зеленню петрушки, кропу. == Примітки == {{reflist}} {{Українська кухня}} [[Категорія:Рецепти]] [[Категорія:Супи]] duurz65mwtu2bolgr1nqf9qauo7ak79 Рецепт:Зелений борщ 102 7252 41425 38333 2026-08-20T05:55:40Z Heffalump1974 3591 шаблон 41425 wikitext text/x-wiki '''[[w:Зелений борщ|Зелений борщ]]''' (також ''щавлевий'' або ''весняний'') — традиційна українська страва; різновид борщу, до складу якого найчастіше входять щавель і яйця. {{Вікіпедія|Зелений борщ}} == Зелений борщ по-білоцерківськи == [[File:Green borscht with pork ribs.jpg|міні|Зелений борщ із свинячими реберцями]] '''Склад:''' півлітрова банка щавлю, 600 г свинячих реберець, 4 крупних яйця, 3 великі картоплини, 2 морквини, 1 цибулина, 40 г [[w:кріп|кропу]], лавровий лист, духмяний перець, сіль, сметана (15%). '''Приготування:''' # Зварити бульйон знімаючи пінку. Свинячі реберця для бульйону можна розрізати по 1−3 щоб їх було зручніше їсти. Бульйон з реберець вариться 1,5−2 години. # Коли бульйон готовий, вкинути почищені цілі картоплини. # Коли картопля трохи покипить, вкинути крупно терту моркву і покришену цибулину. # Через хвилин 20−25 варіння картоплі, дістати картоплини, подробити виделкою і вкинути назад до каструлі. # Додати щавель і кріп (можна іншу зелень, наприклад, шпинат). # Яйця збити в чашці чи мисці, повільно влити до кип'ячого борщу помішуючи. # Додати спеції, сіль. # Через 5 хвилин можна їсти. Зі сметаною (обов'язково) і часником (на смак). '''Варіація:''' за наявності квасолі зелений борщ готувався також із квасолею. '''Історія рецепту:''' Записано у м. Біла Церква від мами (1963 р. н.), яка дізналася його від своєї мами (1937 р. н.), а та від своєї (1913 р. н.). <gallery widths=100px> Green borscht ingredients.jpg|Інгредієнти Green borscht recipe - 1.jpg|Свинячі реберця Green borscht recipe - 2.jpg|Зварити бульйон Green borscht recipe - 3.jpg|Почистити картоплю Green borscht recipe - 4.jpg|Вкинути картоплини Green borscht recipe - 5.jpg|Покришити цибулину і натерти моркви Green borscht recipe - 6.jpg|Вкинути у каструлю Green borscht recipe - 7.jpg|Коли картоплини зваряться, дістати Green borscht recipe - 8.jpg|Покришити виделкою і вкинути назад Green borscht recipe - 9.jpg|Консервований щавель Green borscht recipe - 10.jpg|Щавель куплений на базарі Green borscht recipe - 11.jpg|Покришити кріп Green borscht recipe - 12.jpg|Страва до вкидання щавлю Green borscht recipe - 13.jpg|Вкинути щавель Green borscht recipe - 14.jpg|Вкинути кріп Green borscht recipe - 15.jpg|Збити яйця Green borscht recipe - 16.jpg|Повільно влити яйця помішуючи </gallery> == Зелений борщ із буряком == [[Файл:Борщ зелений.jpeg|міні|Зелений борщ із буряком]] '''Склад''': 50 г свинини, 100 г кісток, 60 г буряку, 150 г картоплі, 25 г моркви, 10 г кореня петрушки, 20 г ріпчастої цибулі, 10 г зеленої цибулі, 80 г щавлю, 80 г шпинату, 3 г пшеничного борошна, 1/4 яйця, 20 г сметани, 3 г цукру, оцет, 10 г жиру, перець духмяний, лавровий лист, кріп, сіль. '''Приготування''': Свинину варять до готовності у киплячому кістковому бульйоні, витягують і нарізують на порції. Буряк, нарізаний соломкою, збризкують оцтом, добре перемішують і тушкують до готовності, додаючи цукор і бульйон. Моркву, петрушку і цибулю нарізують, обсмажують і перемішують з борошном. У проціджений киплячий бульйон кладуть картоплю і варять протягом 10-15 хвилин, додають буряк, овочеву суміш з борошном, подрібнені щавель і шпинат, перець, лавровий лист, сіль і варять до готовності. Подаючи на стіл, у тарілку кладуть шматочок м'яса, кружальце круто звареного яйця і дрібно нарізані зелену цибулю і кріп. == Пісний зелений борщ == Також готують пісний без м'яса (іноді вегетаріанський) зелений борщ під час посту, особливо навесні — частіше з яйцями. На Київщині (село [[w:Крушинка|Крушинка]] та інші) до такого борщу не додається буряк, тому колір борщу саме зелений без червоного відтінку. Іноді щавель заміняють [[w:Калюжниця|салатом]] або кропивою. {{Українська кухня}} [[Категорія:Рецепти]] [[Категорія:Супи]] fs30zevpqnwo10t85ntcktno4smosn5 Рецепт:Куліш 102 7283 41427 38337 2026-08-20T05:56:20Z Heffalump1974 3591 шаблон 41427 wikitext text/x-wiki '''[[w:Куліш (страва)|Куліш]]''' — страва української та білоруської кухонь. {{Вікіпедія|Куліш (страва)}} == Куліш пшоняний == ''Склад.'' Пшоно&nbsp;— 100, цибуля ріпчаста&nbsp;— 105/85, сало шпик&nbsp;— 25/20. Вихід1&nbsp;— 1000. ''Приготування.'' Пшоно миють кілька разів теплою водою (40-50 °С), а потім обшпарюють окропом. Сало шпик нарізують дрібними кубиками, смажать до виділення жиру, додають нарізану дрібними кубиками ріпчасту цибулю, пасерують. У киплячий бульйон кладуть підготовлене пшоно, варять майже до готовності, заправляють [[w:Пасеровка|пасерованою]] на салі цибулею, солять і варять 3-5 хв. Куліш можна готувати з картоплею. У цьому випадку частину пшона замінюють картоплею. == Куліш з грибами == ''Склад.'' Картопля&nbsp;— 333/250, пшоно&nbsp;— 60, гриби білі сушені&nbsp;— 8, цибуля ріпчаста&nbsp;— 95/80, олія&nbsp;— 25, грибний відвар&nbsp;— 750. Вихід&nbsp;— 1000. ''Приготування.'' Грибний відвар доводять до кипіння, кладуть нарізану кубиками картоплю, доводять до кипіння, додають підготовлене пшоно і варять майже до готовності. За 3-5 хв. до закінчення варіння кладуть дрібно нарізані варені гриби, підсмажені на олії разом з дрібно нарізаною цибулею, сіль, спеції. == Куліш сіверський == ''Склад.'' Пшоно&nbsp;— 83, морква&nbsp;— 16/13, цибуля ріпчаста&nbsp;— 56/47, сало шпик&nbsp;— 20,8/20, бульйон&nbsp;— 800. Свинина (лопаткова частина, грудинка)&nbsp;— 136/116, печінка яловича&nbsp;— 54/44, маса вареної свинини&nbsp;— 70, маса смаженої печінки&nbsp;— ЗО. Вихід&nbsp;— 1000/100. ''Приготування.'' Грудинку або лопаткову частину свинини рубають на невеликі шматочки і варять бульйон. Частину сала нарізують дрібними кубиками, смажать до золотистого кольору, додають печінку, нарізану дрібними кубиками, і обсмажують разом. Пшоно, обсмажені сало і печінку кладуть у бульйон і варять 15-20 хв., додають пасеровані на решті сала моркву та цибулю, спеції, сіль, варять 5-7 хв. {{Українська кухня}} [[Категорія:Рецепти]] [[Категорія:Каші]] [[Категорія:Супи]] j8pnpocufhkovo4ywx720f8r438393t Рецепт:Холодник 102 7295 41430 37866 2026-08-20T05:57:13Z Heffalump1974 3591 шаблон 41430 wikitext text/x-wiki [[Файл:Holodnyk_006.jpg|міні]] '''[[w:холодник|Холодни́к]]''' або '''холо́дний борщ'''&nbsp;— різновид [[w:Борщ|борщу]]. {{Вікіпедія|Холодник (страва)}} == Холодник == Накришити 2-3 червоних буряка, налити сирівцю і дати закипіти 2 рази. Злити червону юшку, зоставивши частину буряків, а останні буряки залити водою і доварити. Одварити щавлю або ботвини і зварити круто яйця. Почистити і порізати огірки. Уливши у [[w:рондель|рондель]] до зварених буряків кислого молока, росколотити його, додати трохи буряків, яєць, огірків, укропу, зеленої цибулі, як хто любить, червоної юшки, що раніш було злито, до смаку соли і сметани з ростертими крутими жовтками. Винести на лід.<ref name="klyn"/> == Холодник з раками == Зварити сотню добрих раків, почистити шийки. Ніжки й тельбухи покласти окремо, шкурки дрібно потовкти, підливаючи [[w:сирівець|сирівцем]] і олію з оливи, скласти докупи в макітру або в череп'яну миску, налити 3 пляшки сирівцю, щоб укрив всі шкурки, дати відстоятися, тоді набрати в чисту ганчірочку й вичавлювати разом з сирівцем. Зварити 5 яєць, білки дрібно посікти. З 10 огірків дрібно покришити. Жовтки добре розтерти з 2 ч. ложечками гірчиці, додати трохи солі, сметани, розвести сирівцем з-під раків, вкинути покришені білки, огірки, ракові шийки, ніжки, тельбухи. Можна додати кришеної салати. Окремо подавати кришену цибулю, або часник.<ref name="klyn">Клиновецька З. [https://archive.org/stream/klinovetska#page/n13/mode/2up Страви й напитки на Україні]&nbsp;— Київ&nbsp;— Львів, 1913&nbsp;р.— С. 9, 10.</ref> == Холодник наддніпрянський == Накришити дрібно чищених огірків, покласти в ринку й поставити на лід. Зварити в солоному окропі нарівно щавлю й ботвини, одкинуть на ситко, злить холодною водою, протерти, поставити на лід. Перед тим як подавать розвести квасом, накришить зеленої цибулі, а як до смаку, то й укропу, естрагону, посолить. Накришить холодної смаженої телятини, як є то й ракових шийок та круто зварених яєць. Все це добре заправить свіжою сметаною і, даючи на стіл, вкинути грудку льоду.<ref name="klyn"/> == Примітки == {{reflist}} {{Українська кухня}} [[Категорія:Рецепти]] [[Категорія:Супи]] fmv01kd54y73057kssuefhee21g2eil Рецепт:Верещака 102 7944 41432 37874 2026-08-20T05:57:48Z Heffalump1974 3591 шаблон 41432 wikitext text/x-wiki '''Вереща́ка'''&nbsp;— страва української національної кухні<ref name="bezus">[https://archive.org/stream/ukr_natsionalna_kuchnya#page/n36/mode/1up Верещака] // [[Українська національна кухня (книга)|Українська національна кухня]] / ред.-укл. Л.&nbsp;М.&nbsp;Безусенко.&nbsp;— Донецьк: Сталкер, 2002.&nbsp;— С. 69.&nbsp;— 287 с.</ref>. Для приготування використовується свиняча грудинка<ref>{{СУМ-20|Верещака2}}</ref><ref>{{СУМ-11|Верещака}}</ref>, тушкована у [[Рецепт:Буряковий квас|буряковому квасі]] або буряковому настої<ref>[https://archive.org/stream/kuhnya2008#page/n259/mode/1up Верещака (старовинний рецепт)] // Найкращі страви української кухні / І.&nbsp;О.&nbsp;Сокол.&nbsp;— Харків: Клуб сімейного дозвілля, 2008.&nbsp;— C. 260.&nbsp;— 400 с.</ref>. Також її готували не лише з груднини чи поребрини, але й зі свіжої підчеревини, свіжо-начинених ковбас. Верещаку заправляли тертим хлібом, борошном, квасом<ref name="klynov">{{книга |автор = З.&nbsp;Клиновецька |заголовок = Верещака // Страви й напитки на Україні |сторінки =[https://archive.org/stream/klinovetska#page/n14/mode/1up 10], [https://archive.org/stream/klinovetska#page/n184/mode/1up 180] }}</ref>. == Рецепт == Свіжу свинячу грудину розрубати на шматки, посолити та обсмажити з обох боків на свинячому салі. Перекласти у посуд для тушкування, налити стільки [[Рецепт:Буряковий квас|бурякового квасу]], щоб було кисленьке, розбавивши, якщо потрібно, його водою, додати 5 зерен духмяного та 5 зерен звичайного перцю і дрібно порізану цибулину. Тушкувати до напівготовності, після чого додати 4 ложки тертого хліба, розмішати, і тушкувати до готовності.<ref name="klynov"/><ref name="bezus"/> == Примітки == {{Українська кухня}} [[Категорія:Рецепти]] [[Категорія:Українська кухня]] pucre1xb1v27y51wyuvt57kub6f0mjy Рецепт:Чир 102 7997 41431 37785 2026-08-20T05:57:32Z Heffalump1974 3591 шаблон 41431 wikitext text/x-wiki [[Зображення:Чир.jpg|thumb|Чир]] '''Чир'''&nbsp;— старовинна страва української кухні; рідка каша, яку готують з кукурдзяного борошна, звареного в підсоленому молоці. {{Вікіпедія|Чир}} == Чир 1<ref name="zns1990" /> == === Склад === (на 1 порцію) * молоко свіже: 510 г (також можна молоко розвести з водою навпіл) * борошно кукурудзяне: 25 г * сіль: 3 г === Приготування === # Борошно повільно всипати у каструлю з киплячим молоком. # Посолити. Варити помішуючи, щоб не залишилось грудок, протягом 10 хв. Готова страва має рідку консистенцію. Подавати її до столу у тарілках гарячою. == Примітки== {{reflist|30em|refs= <ref name=zns1990>{{Cite book |title=Закарпатські народні страви |last1=Мицько |first1=М.А. |last2= |first2 = |publisher=Карпати |location=Ужгород |chapter=Торгоня |isbn=}}</ref> }} == Посилання == * [http://community.livejournal.com/ua_kyxap/129270.html Рецепт та приготування] {{Українська кухня}} [[Категорія:Рецепти]] [[Категорія:Українська кухня]] jdu5to1s0jx50ao5to5yer47otmb7i7 Рецепт:Малай 102 7999 41439 37787 2026-08-20T06:00:29Z Heffalump1974 3591 шаблон 41439 wikitext text/x-wiki [[Файл:Mălai.jpg|thumb|280px|Пиріг малай]] '''Мала́й''' (від рум. ''mălái'')&nbsp;— вчинений невеликих розмірів хліб або корж з кукурудзяного, горохового або пшоняного борошна. {{Вікіпедія|Малай (страва)}} == Малай 1<ref name="zns1990" /> == (пиріг) === Склад === (на одну порцію) * борошно кукурудзяне: 50 г * борошно пшеничне: 20 г * гарбуз: 36 г (відварити і протерти) * молоко: 100 г * цукор: 4 г * масло вершкове: 2 г * сіль: 2 г * сода: 0,01 г * ванільний цукор: 0,01 г * жир: 3 г * сухарі: 15 г * яйце: 1/7 шт * цукрова пудра: 1 г === Приготування === # Частиною кип'яченого молока заварити кукурудзяне борошно і поставити у тепле місце. # Додати цукор, вершкове масло, сіль, соду і ванільний цукор та добре вимішати. # Додати решту молока, гарбуз, пшеничне борошно та вимішати до однорідної маси. # Лист для випікання змастити жиром і присипати сухарями; перекласти на нього підготовлене тісто (товщина шару 4-5 см), вирівняти поверхню, змастити яйцем та й поставити у гарячу духовку. Випікати до готовності. # Готовий пиріг розрізати на порції і перед подачею посипати цукровою пудрою. == Примітки== {{reflist|30em|refs= <ref name=zns1990>{{Cite book |title=Закарпатські народні страви |last1=Мицько |first1=М.А. |last2= |first2 = |publisher=Карпати |location=Ужгород |chapter=Малай |isbn=}}</ref> }} {{Українська кухня}} [[Категорія:Рецепти]] kqikct3obfn8iaw6ragjnuie049ckyl Рецепт:Кров'янка 102 8008 41434 37807 2026-08-20T05:58:30Z Heffalump1974 3591 шаблон 41434 wikitext text/x-wiki [[Файл:Morcilla-burgos_2.jpg|thumb|280px|Кров'янка]] '''Кров'я́нка''' , також '''кров'яна ковбаса''', '''кашанка''', '''кишка''' (нім. ''Blutwurst'', пол. ''kaszanka'') — ковбаса з свинячих кишок, спеціально підготовлених та оброблених, начинених фаршем з гречаних чи рисових круп, свинячої крові, м'яса, сала, смальцю, замоченого в молоці пшеничного хліба, цибулі та приправ. {{Вікіпедія|Кров'янка}} == Кров'янка 1<ref name="ukrstravy1960" /> == === Склад === * кров: 1 кг * сало: 100 г * булка черства: 400 г * яйце: 1 шт * молоко: 2 склянки * перець гіркий: 10 горошин * цибуля: 1 шт === Приготування === # Кров протерти крізь сито, сало нарізати невеликими кубиками, цибулю трохи підсмажити, перець змолоти. # Булку розмочити у молоці, додати протерту кров, нарізане сало, підсмажену цибулю, мелений перець і соль. # Все добре змішати, начинити фаршем кишки, зав'язати їх шпагатом з обох боків. # Занурити кишки у підсолений кип'яток, дати закипіти і відварити при слабкому кипінні. # Під кінець варіння зменшити вогонь, щоб ковбаса не лопнула. Щоб перевірити готовність ковбаси, треба витягнути її з води, проколоти голкою та подивитися на колір соку, що витікає з неї: кров'янистий — продовжувати варіння, прозорий — готова. Перед подаванням кров'янку підсмажують на маслі. == Див. також == * [[Рецепт:Гурки|Гурки]] * [[Рецепт:Спартанська юшка|Спартанська юшка]] * [[Рецепт:Кров'яні млинці|Кров'яні млинці]] * [[Рецепт:Сальтисон|Сальтисон]] * [[Рецепт:Морсілья|Морсілья]] == Примітки== {{reflist|30em|refs= <ref name=ukrstravy1960>{{Cite book |title=Українські страви |last1=Мицько |first1=М.А. |last2= |first2 = |publisher=Державне видавництво технічної літератури УРСР |location=Київ |chapter=Кров'янка |isbn=}}</ref> }} {{Українська кухня}} [[Категорія:Рецепти]] onr60kqdzimi3nv9q03lyty8zqrk94a Рецепт:Шпундра 102 8011 41435 37875 2026-08-20T05:58:46Z Heffalump1974 3591 шаблон 41435 wikitext text/x-wiki '''Шпу́ндра''', (або '''шпундри́''')&nbsp;— смажена свинина (підчеревина чи грудина), тушкована із буряками в [[Рецепт:Буряковий квас|буряковому квасі]]. На відміну від [[Рецепт:Верещака|верещаки]], шпундру заправляють не сухарями, а борошном, або запареним тертим пшоном. {{Вікіпедія|Шпундра}} == Шпундра 1<ref name="sukuhnya1984" /> == === Склад === * свиняча грудинка: 500 г * жир (смалець, або вершкове масло): 1,5 ст. л. * буряки: 750 г * цибуля: 1 шт * борошно пшеничне: 2 ч. л. * [[Рецепт:Буряковий квас|буряковий квас]]: 1 склянка * сіль: за смаком * зелень (петрушка та інш.) === Приготування === # Грудинку очистити від жил та плівок, нарізати дрібними шматками, обсмажити на жирі, додавши борошно та дрібно нарізану цибулю. # Обсмажену грудинку скласти у сотейник, або каструлю, додати нарізані буряки, залити [[Рецепт:Буряковий квас|квасом]], посолити і тушкувати до готовності. Подавати грудинку разом із буряками, з якими вона тушкувалася, посипати дрібно нарізанною зеленню. == Примітки== {{reflist|30em|refs= <ref name=sukuhnya1984>{{Cite book |title=Сучасна українська кухня |last1=Шалимов |first1=С.А. |last2=Шадура |first2 =О.А. |publisher=Техніка |location=Київ |chapter=Шпундра (свиняча грудинка, тушкована в буряковому квасі) |isbn=}}</ref> }} {{Українська кухня}} [[Категорія:Рецепти]] [[Категорія:Українська кухня]] rvh1cjwcq5icr9jzxs1rsmpyfo3hsd7 Рецепт:Вергуни 102 8012 41443 39178 2026-08-20T06:01:38Z Heffalump1974 3591 шаблон 41443 wikitext text/x-wiki [[Файл:Faworki_(close-up).jpg|міні|Вергуни]] '''Вергуни́''', або '''хрусти́'''&nbsp;— українські кондитерські вироби з бездріжджового тіста. Подібні вироби відомі також у кухнях всього світу. {{Вікіпедія|Вергуни}} Розкатане тісто нарізають смужками, які переплітають у формі коси, а потім обсмажують у киплячому жирі. Готові вергуни посипають цукровою пудрою, вживають як гарячими, так і холодними. == Вергуни 1<ref name="strukkuhni1951" /> == === Склад=== (на одну порцію; У страви за розкладкою № 1 входить ширший асортимент продуктів і більші норми закладання основної сировини, ніж за розкладкою № 2.) {| class="wikitable" |+Вергуни !rowspan="3"|Продукти !!colspan="2"|Вага брутто<br>(в г) !!colspan="2"|Вага нетто і<br>півфабрикату<br>(в г) !!colspan="2"|Вага готового<br>продукту<br>(в г) |- !colspan="6"|Розкладки |- ! № 1 || № 2 || № 1 || № 2 || № 1 || № 2 |- |Борошно пшеничне || — ||50 || — ||50 || — || — |- |Молоко || — ||20 ||— ||20||— ||— |- |Яйця ||— ||0,1 шт ||— ||4 ||— ||— |- |Цукор ||— ||7 ||— ||7 ||— ||— |- |Маргарин ||— ||5 ||— ||5 ||— ||— |- |Сіль ||— ||0,5 ||— ||0,5 ||— ||— |- |Сода ||— ||0,5 ||— ||0,5 ||— ||— |- |Кориця ||— ||0,5 ||— ||0,5 ||— ||— |- |Олія ||— ||6 ||— ||6 ||— ||— |- |Цукрова пудра ||— ||3 ||— ||3 ||— ||— |- !Вихід !! — !! — !! — !! — !!— !!80 |} === Приготування === # Борошно просіяти. Додати яйця, маргарин, соду, цукор, сіль, молоко, та замісити тісто. # Тісто розкатати товщиною в 1 мм і нарізати на смужки 10-15 x 3 см; розрізати їх посередині в довжину, вивернути та смажити в киплячій олії. # Змішати цукрову пудру з корицею та присипати цією сумішшю готові вергуни. == Вергуни 2<ref name="zns1990" /> == === Склад === (на 10 шт по 50 г) * борошно 310 г * маргарин: 35 г * яйце: 1 шт * цукор-пісок: 27 г * дріжджі: 14г. * сіль: 5 г * вода: 110 г * цукрова пудра: 10 г === Приготування === # Приготувати безопарне дріжджове тісто: в посудині з теплою (30—35 С) водою розчинити дріжджі, цукор, сіль, додати яйця і 6орошно та перемішати в однорідну масу. # Маргарин розтопити, залити до маси, замісити тісто і поставити в тепле (35-40 C) приміщення на 3-4 години для бродіння. За цей час тісто має збільшитись в об'ємі в 1,5 рази, тоді обім'яти його і знову поставити для бродіння, під час якого обминати ще 2 рази. # Готове тісто розділити на шматки в 510 г, дати підійти, нарізати на 10 частин і тонко розкатати. # Розкачане тісто нарізати довгими смужками завширшки в два пальці, а їх також нарізати на смужки завдовжки 15 см. # Зробити ножем посередині кожної смужки розріз завдовжки 3 см, протягнути крізь нього один кінець смужки, вирівняти і одразу смажити у великій кількості добре розігрітого жиру, перевертаючи на обидва боки. Коли вергуни зарум'яняться, покласти їх у тарілку і посипати цукровою пудрою. == Див. також == * [[Рецепт:Київська троянда|Київська троянда]] == Примітки== {{reflist|30em|refs= <ref name=strukkuhni1951>{{Cite book |title=Страви української кухні |last1=Запорожець |first1=В.П. |last2= |first2 = |publisher=Державне видавництво технічної літератури України |location=Київ |chapter=Вергуни |isbn=}}</ref> <ref name=zns1990>{{Cite book |title=Закарпатські народні страви |last1=Мицько |first1=М.А. |last2= |first2 = |publisher=Карпати |location=Ужгород |chapter=Вергуни |isbn=}}</ref> }} {{Українська кухня}} [[Категорія:Рецепти]] [[Категорія:Українська кухня]] 6wbm8c6vyiwfvfr0oog1p84b97wi1hy Рецепт:Пампушки 102 8015 41440 37886 2026-08-20T06:00:45Z Heffalump1974 3591 шаблон 41440 wikitext text/x-wiki [[Файл:Pampushky-plain.jpg|міні|Пампушки до борщу]] '''Пампушка''' ('''пампух, пампушок''')&nbsp;— невелика кругла пишна булочка, виготовлена з [[Рецепт:Тісто дріжджове|дріжджового тіста]] з житнього, пшеничного, гречаного чи змішаного пшенично-гречаного борошна. Печені пампушки подавали до борщу замість хліба. {{Вікіпедія|Пампушка}} == Пампушки 1<ref name="strukkuhni1951" /> == === Склад=== (на одну порцію; У страви за розкладкою № 1 входить ширший асортимент продуктів і більші норми закладання основної сировини, ніж за розкладкою № 2.) {| class="wikitable" |+Пампушки з часником !rowspan="3"|Продукти !!colspan="2"|Вага брутто<br>(в г) !!colspan="2"|Вага нетто і<br>півфабрикату<br>(в г) !!colspan="2"|Вага готового<br>продукту<br>(в г) |- !colspan="6"|Розкладки |- ! № 1 || № 2 || № 1 || № 2 || № 1 || № 2 |- |Борошно пшеничне ||— ||80 ||— ||80 ||— ||— |- |Вода ||— ||32 ||— ||32 ||— ||— |- |Цукор ||— ||5 ||— ||5 ||— ||— |- |Дріжджі |— ||2,5 ||— ||2,5 ||— ||— |- |Олія для тіста ||— ||2 ||— ||2 ||— ||— |- |Сіль ||— ||1 ||— ||1 ||— ||— |- !align="center"|Для підливи: || || || || || || |- |Часник ||— ||6 ||— ||5 ||— ||— |- |Олія ||— ||5 ||— ||5 ||— ||— |- |Сіль ||— ||1 ||— ||1 ||— ||— |- |Вода ||— ||20 ||— ||20 ||— ||— |- !Вага півфабрикату !! — !! — !! — !! — !! — !!115 |} === Приготування === # Розвести у теплій воді дріжджі, цукор, сіль і чверть підготовленого борошна; замісити з них тісто. # Дати тістові підійти 1—1,5 години, додати решту борошна, олію, добре вимісити і знову дати підійти. # Викласти готове тісто на стіл і виготовити з нього кульки вагою в 25 г, надати їм форми булочок, дати підійти і випікати у духовці. # Приготувати підливу з розтертого з сіллю часнику, олії і кип’яченої води, нею поливати пампушки. == Примітки== {{reflist|30em|refs= <ref name=strukkuhni1951>{{Cite book |title=Страви української кухні |last1=Запорожець |first1=В.П. |last2= |first2 = |publisher=Державне видавництво технічної літератури України |location=Київ |chapter=165. Пампушки з часником |isbn=}}</ref> }} {{Українська кухня}} [[Категорія:Рецепти]] [[Категорія:Українська кухня]] 5as7gh09gx9p2xn9q2qri52562h1dyw Рецепт:Гречаники 102 8016 41437 37888 2026-08-20T05:59:34Z Heffalump1974 3591 шаблон 41437 wikitext text/x-wiki [[Файл:08129_Buckwheat_pancakes_with_yogurt_sauce,_Sanok.jpg|міні|Українські гречаники з йогуртом ]] '''Гречаники'''&nbsp;— страва із гречаної крупи із додаванням інших складників. {{Вікіпедія|Гречаники (страва)}} == Гречаники 1<ref name="strukkuhni1951" /> == === Склад=== (на одну порцію; У страви за розкладкою № 1 входить ширший асортимент продуктів і більші норми закладання основної сировини, ніж за розкладкою № 2.) {| class="wikitable" |+Гречаники !rowspan="3"|Продукти !!colspan="2"|Вага брутто<br>(в г) !!colspan="2"|Вага нетто і<br>півфабрикату<br>(в г) !!colspan="2"|Вага готового<br>продукту<br>(в г) |- !colspan="6"|Розкладки |- ! № 1 || № 2 || № 1 || № 2 || № 1 || № 2 |- |Борошно гречане ||— ||76 ||— ||76 ||— ||— |- |Масло вершкове ||— ||4 ||— ||4 ||— ||— |- |Цукор ||— ||2 ||— ||2 ||— ||— |- |Яйця ||— ||0,25 шт ||— ||10 ||— ||— |- |Сіль ||— ||0,8 ||— ||0,8 ||— ||— |- |Дріжджі ||— ||2,5 ||— ||2,5 ||— ||— |- |Молоко ||— ||26 ||— ||26 ||— ||— |- !align="right"|Вихід тіста || — || — || — || 120 || — || 100 |- |Жир для мащення листа ||— ||0,25 ||— ||0,25 ||— ||— |- |Олія ||— ||10 ||— ||10 ||— ||10 |- !Вихід !! — !! — !! — !! — !!— !!110 |} === Приготування === # Молоко підігріти до 30°. Розчинити в ньому дріжджі, сіль і цукор. # Додати яйця, всипати просіяне борошно, замісити густе тісто і поставити у тепле місце на 1,5—2 години щоб підійшло. Під час сходження обім'яти 2-3 рази. # Коли тісто підійде, покласти його на стіл, посипати борошном і сформувати прямокутні батончики, які виложити на змащені жиром кондитерські листи і дати підійти. # Надрізати батончики зверху через кожні 2,5 см ножем, змоченим в олії та випікати у духовці. # Готові гречаники гарячими зматити олією і розламати по лінії надрізів. Відпускати по 3 — 4 шт. на порцію. Гречаники також можна подавати з часником до борщу і з ряжанкою, як другу страву. == Примітки== {{reflist|30em|refs= <ref name=strukkuhni1951>{{Cite book |title=Страви української кухні |last1=Запорожець |first1=В.П. |last2= |first2 = |publisher=Державне видавництво технічної літератури України |location=Київ |chapter=131. Гречаники |isbn=}}</ref> }} {{Українська кухня}} [[Категорія:Рецепти]] [[Категорія:Українська кухня]] b2w33xkody5mtp1pmz27uqgxvxc6hez Рецепт:Лемішка 102 8020 41428 37885 2026-08-20T05:56:37Z Heffalump1974 3591 шаблон 41428 wikitext text/x-wiki '''Лемішка'''&nbsp;— кашоподібна борошняна страва. {{Вікіпедія|Лемішка}} == Лемішка 1<ref name="strukkuhni1951" /> == === Склад=== (на одну порцію; У страви за розкладкою № 1 входить ширший асортимент продуктів і більші норми закладання основної сировини, ніж за розкладкою № 2.) {| class="wikitable" |+Лемішка з салом !rowspan="3"|Продукти !!colspan="2"|Вага брутто<br>(в г) !!colspan="2"|Вага нетто і<br>півфабрикату<br>(в г) !!colspan="2"|Вага готового<br>продукту<br>(в г) |- !colspan="6"|Розкладки |- ! № 1 || № 2 || № 1 || № 2 || № 1 || № 2 |- |Мука гречана || — || 100 || — || 100 || — || — |- |Вода || — || 60 || — || 60 || — || — |- |Сало-шпик || — || 25 || — || 25 || — || — |- |Сіль || — || 4 || — || 4 || — || — |- !Вихід !! — !! — !! — !! — !! — !! 165 |} === Приготування === # Борошно просіяти, висипати у каструлю і заварити підсоленим окропом до густини в’язкості каші. # Нарізати сало-шпик у вигляді локшини і підсмажити. # Змішати підсмажене сало з тістом, добре вимісити, викласти у форму та випікати у духовці. Відпускати готову лемішку гарячою. == Примітки== {{reflist|30em|refs= <ref name=strukkuhni1951>{{Cite book |title=Страви української кухні |last1=Запорожець |first1=В.П. |last2= |first2 = |publisher=Державне видавництво технічної літератури України |location=Київ |chapter=144. Лемішка з салом |isbn=}}</ref> }} {{Українська кухня}} [[Категорія:Рецепти]] [[Категорія:Українська кухня]] 2hl2nbjcqnhf4zo3wco1l7puuy3igk2 Рецепт:Ряжанка 102 8021 41442 37887 2026-08-20T06:01:18Z Heffalump1974 3591 шаблон 41442 wikitext text/x-wiki [[Файл:Ryazhenka16c.JPG|міні|Ряжанка]] '''Ря́жанка'''&nbsp;— традиційний молочний продукт української кухні, що виготовляється з [[Рецепт:Пряжене молоко|пряженого молока]]. {{Вікіпедія|Ряжанка}} == Ряжанка 1<ref name="strukkuhni1951" /> == === Склад=== (на одну порцію; У страви за розкладкою № 1 входить ширший асортимент продуктів і більші норми закладання основної сировини, ніж за розкладкою № 2.) {| class="wikitable" |+Ряжанка !rowspan="3"|Продукти !!colspan="2"|Вага брутто<br>(в г) !!colspan="2"|Вага нетто і<br>півфабрикату<br>(в г) !!colspan="2"|Вага готового<br>продукту<br>(в г) |- !colspan="6"|Розкладки |- ! № 1 || № 2 || № 1 || № 2 || № 1 || № 2 |- |Молоко свіже || — ||225 ||— ||225 ||— ||— |- |Сметана ||— ||20 ||— ||20 ||— ||— |- |Цукрова пудра ||— ||10 ||— ||10 ||— ||— |- |Ванілін ||— ||0,02 ||— ||0,02 ||— ||— |- !Вихід !! — !! — !! — !! — !!— !!200 |} === Приготування === # Налити молоко у глибоку керамічну посудину, поставити для повільного кипіння у духовку так, щоб молоко підрум’янилося зверху. # Рум’яну пінку, що утворюється на молоці поступово осаджувати ложкою на дно посуду, повторюючи так декілька разів. # Вийняти молоко з духовки, охолодити до кімнатної температури, покласти у молоко сметану, розмішати, дати злегка закиснути і поставити на лід для охолодження. Відпускаючи, ряжанку заправляють цукровою пудрою і ваніліном. == Примітки== {{reflist|30em|refs= <ref name=strukkuhni1951>{{Cite book |title=Страви української кухні |last1=Запорожець |first1=В.П. |last2= |first2 = |publisher=Державне видавництво технічної літератури України |location=Київ |chapter=130. Ряжанка |isbn=}}</ref> }} {{Українська кухня}} [[Категорія:Рецепти]] [[Категорія:Українська кухня]] 6rlycztvp6kjkzj5c5i4fvlldzy5c67 Рецепт:Вареники 102 8022 41436 37891 2026-08-20T05:59:11Z Heffalump1974 3591 шаблон 41436 wikitext text/x-wiki [[Файл:Wareniki.JPG|міні|Вареники з м'ясом]] '''Варе́ники''' — страва у вигляді відвареного прісного тіста і начинки з картоплі, м'яса, грибів, овочів, фруктів, ягід та сиру. {{Вікіпедія|Вареники}} == Вареники 1<ref name="strukkuhni1951" /> == ''Увага: перші три рецепти відрізняються лише складом начинки, склад тіста та його приготування у них однакові.'' ;Вареники з картоплею === Склад=== (на одну порцію; У страви за розкладкою № 1 входить ширший асортимент продуктів і більші норми закладання основної сировини, ніж за розкладкою № 2.) {| class="wikitable" |+Вареники з картоплею: тісто й начинка !rowspan="3"|Продукти !!colspan="2"|Вага брутто<br>(в г) !!colspan="2"|Вага нетто і<br>півфабрикату<br>(в г) !!colspan="2"|Вага готового<br>продукту<br>(в г) |- !colspan="6"|Розкладки |- ! № 1 || № 2 || № 1 || № 2 || № 1 || № 2 |- |Борошно пшеничне || — || 50 || — || 50 || — || — |- |Вода || — || 20 || — || 20 || — ||— |- |Сіль || — || 1 || — || 1 || — ||— |- |Яйця || — || 0,1 шт || — || 4 || — ||— |- !colspan="7" align="center"|Для начинки |- |Картопля || — || 150 || — || 105 || — ||— |- |Цибуля ріпчаста || — || 10 || — || 8 || — ||— |- |Олія || — || 5 || — || 5 || — ||— |- |Перець гіркий || — || 0,02 || — || 0,02 || — ||— |- |Сіль || — || 3 || — || 3 || — ||— |- !Вага півфабрикату !! — !! — !! — !! 185 !! — !! 195 |- |Олія || — || 5 || — || 5 || — ||5 |- |Цибуля ріпчаста || — || 10 || — || 8 || — ||6 |- !Вихід !! — !! — !! — !! — !! — !! 205 |} === Приготування === # Замісити прісне тісто і розкатати його шаром завтовшки в 1,5 мм. Вирізати виїмкою з тіста кружечки, покласти на їх середину начинку, закрити її другим боком коржа, та й заліпити. # Скласти вареники складають посипані борошном на дерев’яні лотки і зберігати у холодному місці. # Перед тим як відпускати, відварити вареники у підсоленій киплячій воді. Подавати з олією і смаженою цибулею. Приготування начинки: відварити й протерти картоплю, заправити її смаженою цибулею, перцем і сіллю ;Вареники з картоплею й грибами. {| class="wikitable" |+Вареники з картоплею й грибами: начинка !rowspan="3"|Продукти !!colspan="2"|Вага брутто<br>(в г) !!colspan="2"|Вага нетто і<br>півфабрикату<br>(в г) !!colspan="2"|Вага готового<br>продукту<br>(в г) |- !colspan="6"|Розкладки |- ! № 1 || № 2 || № 1 || № 2 || № 1 || № 2 |- !colspan="7" align="center"|Для начинки |- |Картопля || — || 125 || — || 87 || — ||— |- |Цибуля ріпчаста || — || 10 || — || 8 || — ||— |- |Олія || — || 5 || — || 10 || — ||— |- |Гриби сушені || — || 10 || — || 10 || — ||— |- |Перець мелений || — || 0,02 || — || 0,02 || — ||— |- |Сіль || — || 3 || — || 3 || — ||— |- !Вага півфабрикату !! — !! — !! — !! 195 !! — !! 210 |- |Олія || — || 5 || — || 5 || — ||5 |- |Цибуля ріпчаста || — || 10 || — || 8 || — ||6 |- !Вихід !! — !! — !! — !! — !! — !! 215 |} === Приготування === # Приготування самих вареників таке ж саме, як у попередньому рецепті. Відпускати з маслом і смаженою цибулею. # Приготування начинки: відварити й протерти картоплю, окремо відварити гриби, та й дрібно посекти їх; заправити картоплю смаженою цибулею, грибами, сіллю і перцем. ;Вареники з капустою {| class="wikitable" |+Вареники з капустою: начинка !rowspan="3"|Продукти !!colspan="2"|Вага брутто<br>(в г) !!colspan="2"|Вага нетто і<br>півфабрикату<br>(в г) !!colspan="2"|Вага готового<br>продукту<br>(в г) |- !colspan="6"|Розкладки |- ! № 1 || № 2 || № 1 || № 2 || № 1 || № 2 |- !colspan="7" align="center"|Для начинки |- |Капуста квашена || — || 135 || — || 95 || — || 80 |- |або свіжа || — || 125 || — || 100 || — || 80 |- |Цукор || — || 3 || — || 3 || — ||— |- |Морква || — || 10 || — || 8 || — ||— |- |Цибуля ріпчаста || — || 10 || — || 8 || — ||— |- |Томат-пюре || — || 10 || — || 10 || — ||— |- |Олія || — || 5 || — || 10 || — ||— |- |Сіль || — || 3 || — || 3 || — ||— |- !Вага півфабрикату !! — !! — !! — !! 180 !! — !! 195 |- |Олія || — || 5 || — || 5 || — || — |- |Цибуля ріпчаста || — || 10 || — || 8 || — ||6 |- !Вихід !! — !! — !! — !! — !! — !! 200 |} === Приготування === # Приготування самих вареників таке ж саме, як у попередньому рецепті. Відпускати з маслом і смаженою цибулею. # Приготування начинки: капусту потушкувати, заправити цукром цукром, а також злегка обсмаженими морквою, цибулею і томатом; на кожен вареник 10— 12 г начинки. ;Вареники з м'ясом === Склад=== {| class="wikitable" |+Вареники з м'ясом !rowspan="3"|Продукти !!colspan="2"|Вага брутто<br>(в г) !!colspan="2"|Вага нетто і<br>півфабрикату<br>(в г) !!colspan="2"|Вага готового<br>продукту<br>(в г) |- !colspan="6"|Розкладки |- ! № 1 || № 2 || № 1 || № 2 || № 1 || № 2 |- |Борошно пшеничне || 66|| 33 || 66|| 33 || — || — |- |Вода || 25 || 12,5 || 25 || 12,5 || — ||— |- |Яйця || 0,5 шт || 0,25 шт || 21 || 10 || — ||— |- |Сіль || 5 || 2,5 || 5 || 2,5 || — ||— |- !Вихід тіста!! — !! — !! 90 !! 45 !! — !! — |- !colspan="7" align="center"|Для начинки |- |М'ясо волове III сорту || 200 || 100 || 148 || 74 || 92 ||46 |- |Цибуля ріпчаста || 10 || 5 || 8 || 4 || — ||— |- |Перець мелений || 0,04 || 0,02 || 0,04 || 0,02 || — ||— |- |Сіль || 2 || 1 || 2 || 1 || — ||— |- !Вихід начинки !! — !! — !! 100 !! 50 !! 210 !! 105 |- |Масло вершкове || 15 || 10 || 15 || 10 || 15 ||10 |- !Загальний вихід !! — !! — !! — !! — !! 225 !! 115 |} === Приготування === # Приготування самих вареників таке ж саме (за винятком пропорцій), як у попередніх рецептах. Відпускати, поливши розтопленим маслом. # Приготування начинки: м'ясо відварити та пропустити через м'ясорубку, додати смажену цибулю, мелений перець, сіль, ще раз пропустити через м’ясорубку і добре розмішати. ;Вареники з сливами === Склад=== {| class="wikitable" |+Вареники з сливами !rowspan="3"|Продукти !!colspan="2"|Вага брутто<br>(в г) !!colspan="2"|Вага нетто і<br>півфабрикату<br>(в г) !!colspan="2"|Вага готового<br>продукту<br>(в г) |- !colspan="6"|Розкладки |- ! № 1 || № 2 || № 1 || № 2 || № 1 || № 2 |- |Борошно пшеничне || 50|| 52 || 50 || 52 || — || — |- |Молоко || 20 || — || 20 || — || — ||— |- |або вода || — || 20 || — || 20 || — ||— |- |Яйця || 0,25 шт || 0,25 шт || 10 || 10 || — ||— |- |Цукор || 2 || 2 || 2 || 2 || — ||— |- |Масло вершкове || 3 || — || 3 || — || — ||— |- |Сіль || 1 || 1 || 1 || 1 || — ||— |- |Сливи || 111 || 111 || 100 || 100 || — ||— |- !Вага півфабрикату!! — !! — !! 182 !! 182 !! 200 !! 200 |- |Цукор для посипання || 15 || 10 || 15 || 10 || 15 ||10 |- |Сметана || 20 || 15 || 20 || 15 || 20 || 15 |- !Вихід !! — !! — !! — !! — !! 235 !! 225 |} === Приготування === # Приготування самих вареників подібне до попередніх рецептів за винятком додавання молока (або води), вершкового масла і цукру. Готові вареники скласти у сотейник. Відпускати, сипавши цукром, окремо подати сметану. # Приготування начинки: видалити із слив кісточки, покласти на тісто та посипати цукром. ;Вареники з вишнями або полуницями === Склад=== {| class="wikitable" |+Вареники з вишнями або полуницями !rowspan="3"|Продукти !!colspan="2"|Вага брутто<br>(в г) !!colspan="2"|Вага нетто і<br>півфабрикату<br>(в г) !!colspan="2"|Вага готового<br>продукту<br>(в г) |- !colspan="6"|Розкладки |- ! № 1 || № 2 || № 1 || № 2 || № 1 || № 2 |- |Борошно пшеничне || 50|| — || 50 || — || — || — |- |Молоко || 20 || — || 20 || — || — ||— |- |Яйця || 0,25 шт || — || 10 || — || — ||— |- |Цукор || 2 || — || 2 || — || — ||— |- |Масло вершкове || 3 || — || 3 || — || — ||— |- |Сіль || 1 || — || 1 || — || — ||— |- |Вишні || 155 || — || 100 || — || — ||— |- |або полуниці || 120 || — || 100 || — || — ||— |- !Вага півфабрикату!! — !! — !! 182 !! — !! 200 !! — |- |Цукор для посипання || 15 || — || 15 || — || 15 || — |- |Сметана || 20 || — || 20 || — || 20 || — |- !Вихід !! — !! — !! — !! — !! 235 !! — |} === Приготування === # Вареники з вишнями або полуницями приготовляють таким же способом, як і вареники з сливами. ;Вареники з яблуками === Склад=== {| class="wikitable" |+Вареники з яблуками !rowspan="3"|Продукти !!colspan="2"|Вага брутто<br>(в г) !!colspan="2"|Вага нетто і<br>півфабрикату<br>(в г) !!colspan="2"|Вага готового<br>продукту<br>(в г) |- !colspan="6"|Розкладки |- ! № 1 || № 2 || № 1 || № 2 || № 1 || № 2 |- |Борошно пшеничне || 50|| — || 50 || — || — || — |- |Молоко || 20 || — || 20 || — || — ||— |- |Яйця || 0,25 шт || — || 10 || — || — ||— |- |Цукор || 2 || — || 2 || — || — ||— |- |Масло вершкове || 3 || — || 3 || — || — ||— |- |Сіль || 1 || — || 1 || — || — ||— |- |Яблука свіжі|| 120 || — || 105 || — || 100 ||— |- !Вага півфабрикату!! — !! — !! 182 !! — !! 200 !! — |- |Сметана || 30 || — || 30 || — || 30 || — |- !Вихід !! — !! — !! — !! — !! 230 !! — |} === Приготування === # Тісто на вареники з яблуками приготовляють так само, як і на вареники з сливами. # Для приготування начинки із свіжих яблук вийняти серцевину й насіння, дрібно нарізати їх і пересипати цукром. Готові вареники полити сметаною і подавати холодними. == Див. також == * [[Рецепт:Вареники ліниві|Вареники ліниві]] == Примітки== {{reflist|30em|refs= <ref name=strukkuhni1951>{{Cite book |title=Страви української кухні |last1=Запорожець |first1=В.П. |last2= |first2 = |publisher=Державне видавництво технічної літератури України |location=Київ |chapter=134. Вареники з картоплею. 135. Вареники з картоплею й грибами. 136. Вареники з капустою. 137. Вареники з м'ясом. 138. Вареники з сливами. 139. Вареники з вишнями або полуницями. 140. Вареники з яблуками. 141. Вареники з повидлом. |isbn=}}</ref> }} {{Українська кухня}} [[Категорія:Рецепти]] [[Категорія:Українська кухня]] 22xf07bv06zo7vuxw70ks2g4hzjxi0f Рецепт:Котлета по-київськи 102 8023 41433 37892 2026-08-20T05:58:12Z Heffalump1974 3591 шаблон 41433 wikitext text/x-wiki [[Файл:Chicken Kiev - Ukrainian East Village restaurant.jpg|міні|Котлета по-київськи]] '''Котле́та по-ки́ївськи'''&nbsp;— різновид котлети у вигляді відбитого курячого філе, у яке загорнуто шматочок холодного вершкового масла. {{Вікіпедія|Котлета по-київськи}} == Котлета по-київськи 1<ref name="strukkuhni1951" /> == === Склад=== (на одну порцію; У страви за розкладкою № 1 входить ширший асортимент продуктів і більші норми закладання основної сировини, ніж за розкладкою № 2.) {| class="wikitable" |+Котлета по-київськи !rowspan="3"|Продукти !!colspan="2"|Вага брутто<br>(в г) !!colspan="2"|Вага нетто і<br>півфабрикату<br>(в г) !!colspan="2"|Вага готового<br>продукту<br>(в г) |- !colspan="6"|Розкладки |- ! № 1 || № 2 || № 1 || № 2 || № 1 || № 2 |- |Курка || 200 || — || 80 || — || — || — |- |Масло вершкове || 30 || — || 30 || — || — || — |- |Яйця || 0,25 шт || — || 10 || — || — || — |- |Сухарі для обкачування || 20 || — || 20 || — || — || — |- !Вага півфабрикату !! — !! — !! 140 !! — !! 125 !! — |- |Жир для смаження || 15 || — || 15 || — || — || — |- |Картопля || 360 || — || 252 || — || 100 || — |- |Жир || 10 || — || 10 || — || — || — |- |Зелений горошок || 50 || — || 50 || — || 50 || — |- |Сіль || 4 || — || 4 || — ||— || — |- !Вихід !! — !! — !! — !! — !!275 !! — |} === Приготування === # Начинити курячий філей вершковим маслом, вмочити в сире яйце, обкатати у сухарях і смажити в жирі до утворення рум’яної кірочки. # Вийняти котлети і поставити на 2 — 3 хвилини в духовку. Відпускати готові котлети негайно, бо коли з часом з них витіче масло, то котлети, постоявши, втратять форму і смак. На гарнір подавати смажену картоплю і зелений горошок, а також за бажанням — моркву, білі гриби або печериці. == Див. також == * [[Рецепт:Клопс|Клопс]] * [[Рецепт:Татарський біфштекс|Татарський біфштекс]] * [[Рецепт:Фалафель|Фалафель]]&nbsp;— близькосхідна страва, схожа на смажені [[Рецепт:|Тефтелі]], але без м'яса. * [[Рецепт:Фрикадельки|Фрикадельки]] * [[Рецепт:Шніцель|Шніцель]] == Примітки== {{reflist|30em|refs= <ref name=strukkuhni1951>{{Cite book |title=Страви української кухні |last1=Запорожець |first1=В.П. |last2= |first2 = |publisher=Державне видавництво технічної літератури України |location=Київ |chapter=69. Котлета по-київськи |isbn=}}</ref> }} {{Українська кухня}} [[Категорія:Рецепти]] [[Категорія:Українська кухня]] 4b3avwbrh1fmeiszy9f79qe950mdhx4 Рецепт:Сластьони 102 8024 41448 37894 2026-08-20T06:03:10Z Heffalump1974 3591 шаблон 41448 wikitext text/x-wiki '''Сластьо́ни'''&nbsp;— українська десертна страва, кульки з тіста, засмажені у киплячій олії і згори обсипані цукром або политі медом. Існують також варіанти запечених сластьон. {{Вікіпедія|Сластьони}} == Сластьони 1<ref name="strukkuhni1951" /> == (запечені з варенням) === Склад=== (на одну порцію; У страви за розкладкою № 1 входить ширший асортимент продуктів і більші норми закладання основної сировини, ніж за розкладкою № 2.) {| class="wikitable" |+Сластьони !rowspan="3"|Продукти !!colspan="2"|Вага брутто<br>(в г) !!colspan="2"|Вага нетто і<br>півфабрикату<br>(в г) !!colspan="2"|Вага готового<br>продукту<br>(в г) |- !colspan="6"|Розкладки |- ! № 1 || № 2 || № 1 || № 2 || № 1 || № 2 |- |Борошно пшеничне || — ||45 ||— ||45 ||— ||— |- |Яйця ||— ||0,1 шт ||— ||4 ||— ||— |- |Масло вершкове ||— ||30 ||— ||30 ||— ||— |- |Варення ||— ||20 ||— ||20 ||— ||— |- |Сіль ||— ||1 ||— ||1 ||— ||— |- |Кислота лимонна ||— ||1 ||— ||1 ||— ||— |- |Яйце для змазування ||— ||0,04 шт ||— ||2 ||— ||— |- !Вихід !! — !! — !! — !! — !!— !!75 |} === Приготування === # Заздалегідь розчинити у холодній воді сіль та лимонну кислоту. # Просіяти борошно на стіл, зробити у ньому воронкоподібне заглиблення і випустити туди яйця. Потім вливають воду з розчиненими в ній сіллю та лимонною кислотою і замісити тісто. Закінчивши місити, тісто злегка посипати борошном і залишити на столі на 25-ЗО хвилин для набухання клейковини (щоб тісто краще розкачувалося). # Розім'яти масло і змішати його з борошном, щоб зв'язати воду, яка є в маслі. Охолодити суміш до 10— 14°. # Розкатати тісто у квадрат товщиною 2-2,5 см, покласти на середину масло, з’єднати кінці впритик і заліпити їх, а потім знову розкатати тісто — в одному напрямі довгою смужкою, яку звернути учетверо. # Повторити таку розкатку 5 разів; після кожних двох розкачувань охолоджувати тісто протягом ЗО — 40 хвилин. # Вирізати з готового слойоного тіста квадратики у вигляді коржика, на середину якого покласти варення. Накрити варення зверху тонкими смужками тіста, змазати яйцем і випікати у духовці. == Примітки== {{reflist|30em|refs= <ref name=strukkuhni1951>{{Cite book |title=Страви української кухні |last1=Запорожець |first1=В.П. |last2= |first2 = |publisher=Державне видавництво технічної літератури України |location=Київ |chapter=194. Сластьони |isbn=}}</ref> }} {{Українська кухня}} [[Категорія:Рецепти]] [[Категорія:Українська кухня]] 0zg0d9nrhzjeyfgb4noztdwnoowx39x Рецепт:Деруни 102 8025 41438 39177 2026-08-20T05:59:52Z Heffalump1974 3591 шаблон 41438 wikitext text/x-wiki [[Файл:Kartoffelpuffer.jpg|міні|Деруни&nbsp;— картопляні [[Рецепт:Млинці|млинці]]]] '''Деруни́''', '''тертюхи́''', '''кремзлики''', '''кийзлики''', '''ма́ндрики''', '''тарчаники''', '''беці''', '''барабулєнники''', '''пляцки''', '''боґачики''', '''тартенники''', '''картопляники''', '''картофляники''' — [[Рецепт:Млинці|млинці]] з тертої картоплі. {{Вікіпедія|Деруни}} == Деруни 1<ref name="strukkuhni1951" /> == === Склад=== (на одну порцію; У страви за розкладкою № 1 входить ширший асортимент продуктів і більші норми закладання основної сировини, ніж за розкладкою № 2.) {| class="wikitable" |+Деруни !rowspan="3"|Продукти !!colspan="2"|Вага брутто<br>(в г) !!colspan="2"|Вага нетто і<br>півфабрикату<br>(в г) !!colspan="2"|Вага готового<br>продукту<br>(в г) |- !colspan="6"|Розкладки |- ! № 1 || № 2 || № 1 || № 2 || № 1 || № 2 |- |Картопля ||— ||300 ||— ||210 ||— ||— |- |Борошно ||— ||20 ||— ||20 ||— ||— |- |Амоній ||— ||1 ||— ||1 ||— ||— |- |Олія для смаження ||— ||10 ||— ||10 ||— ||— |- |Сіль ||— ||4 ||— ||4 ||— ||— |- |Цибуля ріпчаста ||— ||30 ||— ||25 ||— ||— |- |Олія ||— ||2 ||— ||2 ||— ||— |- !Вихід !! — !! — !! — !! — !!— !!180 |} === Приготування === # Обчистити сиру картоплю та натерти на тертці. # Додати борошно, сіль, амоній, розмішати і обсмажити деруни на чавунній сковороді, змащеній олією. Відпускаючи, заправити смаженою на олії цибулею. == Деруни 2<ref name="zns1990" /> == ;кремзлики === Склад === (на одну порцію) * картопля: 45 г * борошно пшеничне 10 г * цибуля: 15 г * яйце (сире): 1/3 шт. * часник: 3 г * сіль: 2 г * перець чорний молотий: 0,02 г * жир кулінарний: 12 г * сметана: 20 г === Приготування === # Картоплю обчистити, промити, натерти на дрібній тертці. Цибулю дрібно нарізати, часник розтерти з сіллю та чорним перцем. # До тертої картоплі додати борошно, цибулю, яйце, розтертий з сіллю та перцем часник. Добре перемішати масу, сформувати з неї коржі круглої форми. # На сковороді розігріти жир, столовою ложкою викладати на неї підготовлені кремзлики та обсмажують з обох боків, доки вони дістануть кірку світло-коричневого кольору. Подавати на тарілках, полити зверху нехолодною сметаною. Також до кремзликів можна подавати різні фарші (напр. смажену з салом цибулю, смажену цибулю з яйцем, м'ясний фарш). Тоді на готовий гарячий кремзлик накладають гарячий фарш (50 г на порцію) і прикривають другим кремзликом, зверху поливають сметаною ;кремзлики по-гуцульськи === Склад === (на одну порцію) * картопля: 245 г * яйце: 1/З шт * борошно: 10 г * сіль: 2 г * перець чорний молотий: 0,05 г * цибуля: 30 г * часник: 4 г * сметана: 20 г * сало свіже: 25 г * свинина: 173 г * жир кулінарний: 5 г * перець червоний молотий: 0,4 г * зелень петрушки: 2 г. === Приготування === # Картоплю обчистити, промити, натерти на дрібній тертці. Цибулю дрібно нарізати, часник розтерти з сіллю та чорним перцем. Підготувати свинину та нарізати по 2 шматки на порцію. # До тертої картоплі додати борошно, цибулю, яйце, розтертий з сіллю та перцем часник, сметану. Добре перемішати масу, сформувати з неї коржі круглої форми. # На сковороді розігріти на жирі сало, столовою ложкою викладати на неї підготовлені кремзлики та обсмажують з обох боків, доки вони дістануть кірку світло-коричневого кольору. # Підготовлену свинину відбити, посолити, посипати перцем і обсмажити з обох боків до готовності. Цибулю пасерувати. Зелень петрушки дрібно нарізати # Покласти кремзлики у горшечок (3 штуки на порцію), зверху покласти смажене м'ясо, полити пасерованою цибулею, посипати червоним перцем та нарізаною зеленню петрушки. Закрити горшечок і запікати у духовці 5— 10 хв. при 180—200 °С. Готову страву вибрати з горшечка, перекласти у тарілку (знизу покласти кремзлики, а зверху м’ясо і цибулю). == Примітки== {{reflist|30em|refs= <ref name=strukkuhni1951>{{Cite book |title=Страви української кухні |last1=Запорожець |first1=В.П. |last2= |first2 = |publisher=Державне видавництво технічної літератури України |location=Київ |chapter=91. Деруни |isbn=}}</ref> <ref name=zns1990>{{Cite book |title=Закарпатські народні страви |last1=Мицько |first1=М.А. |last2= |first2 = |publisher=Карпати |location=Ужгород |chapter=Кремзлики. Кремзлики по-гуцульськи |isbn=}}</ref> }} {{Українська кухня}} [[Категорія:Рецепти]] [[Категорія:Українська кухня]] k95p5hket3qyv0f7k55lm173kh8uugm Рецепт:Кваша 102 8028 41444 37903 2026-08-20T06:01:55Z Heffalump1974 3591 шаблон 41444 wikitext text/x-wiki '''Ква́ша''' — страва з гречаного та/чи житнього борошна з солодом, подібна до густого киселю. {{Вікіпедія|Кваша}} == Кваша 1<ref name="strukkuhni1951" /> == === Склад=== (на одну порцію; У страви за розкладкою № 1 входить ширший асортимент продуктів і більші норми закладання основної сировини, ніж за розкладкою № 2.) {| class="wikitable" |+Кваша !rowspan="3"|Продукти !!colspan="2"|Вага брутто<br>(в г) !!colspan="2"|Вага нетто і<br>півфабрикату<br>(в г) !!colspan="2"|Вага готового<br>продукту<br>(в г) |- !colspan="6"|Розкладки |- ! № 1 || № 2 || № 1 || № 2 || № 1 || № 2 |- |Борошно житнє ||— ||50 ||— ||50 ||— ||— |- |Вода ||— ||200 ||— ||200 ||— ||— |- |Вишня сушена ||— ||50 ||— ||50 ||— ||— |- |Борошно гречане ||— ||50 ||— ||50 ||— ||— |- !Вихід !! — !! — !! — !! — !!— !!300 |} === Приготування === # Житнє борошно просіяти, та заварити окропом до густини рідкої сметани, а потім накрити посудину, в якій заварено борошно, салфеткою і охолодити. # Після охолодження додати гречане борошно, добре вимісити і залишити стояти у теплому місці 4—5 годин до повного самобродіння. # Додати промиті сушені вишні, добре вимісити, закрити каструлю кришкою і варити до готовності. Варену квашу охолоджують при закритій кришці. Готову квашу можна відпускати як гарячою, так і холодною. == Примітки== {{reflist|30em|refs= <ref name=strukkuhni1951>{{Cite book |title=Страви української кухні |last1=Запорожець |first1=В.П. |last2= |first2 = |publisher=Державне видавництво технічної літератури України |location=Київ |chapter=146. Кваша |isbn=}}</ref> }} {{Українська кухня}} [[Категорія:Рецепти]] [[Категорія:Українська кухня]] l54yde02r76o8v1766o6uibvkkqt3wo Рецепт:Пряженя 102 8032 41441 37907 2026-08-20T06:01:00Z Heffalump1974 3591 шаблон 41441 wikitext text/x-wiki [[File:Priazhenia_(Ukrainian_omelette).jpg|thumb|Пряженя на молоці, смажена на сковорідці..]] '''Пряже́ня''' — український різновид [[Рецепт:Омлет|омлету]], [[Рецепт:Яєшня|яєшня]] з борошном і молоком або сметаною. {{Вікіпедія|Пряженя}} == Рецепти == Головною відмінністю пряжені від звичайного омлету є те, що її готують із додаванням борошна. Пряженю можна смажити на сковорідці на маслі або запікати в духовці на маргарині. Інколи смажать, розмішуючи ложкою або кулінарною лопаткою. == Пряженя 1<ref name="strukkuhni1951" /> == ;Пряженя з курячою печінкою === Склад=== (на одну порцію; У страви за розкладкою № 1 входить ширший асортимент продуктів і більші норми закладання основної сировини, ніж за розкладкою № 2.) {| class="wikitable" |+Пряженя з курячою печінкою !rowspan="3"|Продукти !!colspan="2"|Вага брутто<br>(в г) !!colspan="2"|Вага нетто і<br>півфабрикату<br>(в г) !!colspan="2"|Вага готового<br>продукту<br>(в г) |- !colspan="6"|Розкладки |- ! № 1 || № 2 || № 1 || № 2 || № 1 || № 2 |- |Яйця || 3 шт || 2 шт || 129 || 86 || — || — |- |Молоко або вода || 45 || 30 || 45 || 30 || — || — |- |Куряча печінка варена || 40 || 30 || 40 || 30 || 40 || 30 |- |Масло вершкове || 15 || 10 || 15 || 10 || — || — |- |Сіль || 2 || 2 || 2 || 2 || — || — |- !Вихід !! — !! — !! — !! — !!210 !! 145 |} === Приготування === # Нарізати печінку і і злегка обсмажити на жирах. # Окремо випустити яйця, додати молоко або воду, посолити і вимісити в однорідну масу. Одержану масу вилити на гарячу сковорідку і запікти. # Викласти на середину пряжені смажену печінку і згорнути у вигляді пиріжка. Відпускаючи, полити пряженю розтопленим вершковим маслом. ;Пряженя з шинкою === Склад=== (на одну порцію; У страви за розкладкою № 1 входить ширший асортимент продуктів і більші норми закладання основної сировини, ніж за розкладкою № 2.) {| class="wikitable" |+Пряженя з шинкою !rowspan="3"|Продукти !!colspan="2"|Вага брутто<br>(в г) !!colspan="2"|Вага нетто і<br>півфабрикату<br>(в г) !!colspan="2"|Вага готового<br>продукту<br>(в г) |- !colspan="6"|Розкладки |- ! № 1 || № 2 || № 1 || № 2 || № 1 || № 2 |- |Яйця || 3 шт || 2 шт || 129 || 86 || — || — |- |Вода або молоко|| 45 || 30 || 45 || 30 || — || — |- |Шинка варена || 50 || 30 || 36 || 22 || 32 || 20 |- |Сіль || 2 || 2 || 2 || 2 || — || — |- !Вихід !! — !! — !! — !! — !!200 !! 135 |} === Приготування === # Нарізати шинку шматочками і обсмажити з жиром. # Окремо випустити яйця, розвести молоком або водою, посолити, вимісити і вилити на гарячу сковорідку з шинкою. # Обсмажену пряженю згорнути у вигляді пиріжка і подавати гарячою. ;Пряженя з варенням === Склад=== (на одну порцію; У страви за розкладкою № 1 входить ширший асортимент продуктів і більші норми закладання основної сировини, ніж за розкладкою № 2.) {| class="wikitable" |+Пряженя з варенням !rowspan="3"|Продукти !!colspan="2"|Вага брутто<br>(в г) !!colspan="2"|Вага нетто і<br>півфабрикату<br>(в г) !!colspan="2"|Вага готового<br>продукту<br>(в г) |- !colspan="6"|Розкладки |- ! № 1 || № 2 || № 1 || № 2 || № 1 || № 2 |- |Яйця || 3 шт || 2 шт || 129 || 86 || — || — |- |Вода або молоко|| 45 || 30 || 45 || 30 || — || — |- |Варення || 40 || 30 || 40 || 30 || 40 || 30 |- |Цукрова пудра || 10 || 8 || 10 || 8 || — || — |- |Масло вершкове || 15 || 10 || 15 || 10 || 15 || 10 |- |Сіль || 1 || 1 || 1 || 1 || — || — |- !Вихід !! — !! — !! — !! — !!225 !! 155 |} === Приготування === # Випустити яйця, розвести молоком або водою, посолити, вилити на гарячу сковорідку рівним шаром і засмажити. # Викласти на обсмажену пряженю варення і загорнути у вигляді пиріжка. # Посипати пряженю зверху цукровою пудрою і припікти куховарського голкою. == Див. також == * [[Рецепт:Соложеник|Соложеник]] == Примітки== {{reflist|30em|refs= <ref name=strukkuhni1951>{{Cite book |title=Страви української кухні |last1=Запорожець |first1=В.П. |last2= |first2 = |publisher=Державне видавництво технічної літератури України |location=Київ |chapter=175. Пряженя з курячою печінкою, 176. Пряженя з шинкою, 177. Пряженя з варенням. |isbn=}}</ref> }} {{Українська кухня}} [[Категорія:Рецепти]] [[Категорія:Українська кухня]] tagbihob4622hv071l2w1yrfliwipda Рецепт:Огірочник 102 8341 41429 39069 2026-08-20T05:56:54Z Heffalump1974 3591 шаблон 41429 wikitext text/x-wiki '''Огірочник'''&nbsp;— юшка, зварена з солоними огірками. {{Вікіпедія|Огірочник (страва)}} == Огірочник 1<ref name="strukkuhni1951" /> == === Склад=== (на одну порцію; У страви за розкладкою № 1 входить ширший асортимент продуктів і більші норми закладання основної сировини, ніж за розкладкою № 2.) {| class="wikitable" |+Огірочник !rowspan="3"|Продукти !!colspan="2"|Вага брутто<br>(в г) !!colspan="2"|Вага нетто і<br>півфабрикату<br>(в г) !!colspan="2"|Вага готового<br>продукту<br>(в г) |- !colspan="6"|Розкладки |- ! № 1 || № 2 || № 1 || № 2 || № 1 || № 2 |- |Кістки ||100 ||100 ||100 ||100 ||— ||— |- |Серце ||97 ||48 ||88||44 ||50 ||25 |- |Картопля ||150 ||150 ||105 ||105 ||— ||— |- |Морква ||20 ||20 ||16 ||16 ||— ||— |- |Петрушка ||40 ||40 ||30 ||30 ||— ||— |- |Селера ||15 ||15 ||10 ||10 ||— ||— |- |Цибуля ріпчаста ||25 ||25 ||21 ||211 ||— ||— |- |Огірки солоні ||75 ||75 ||45 ||45 ||— ||— |- |Шпинат або салат ||50 ||50 ||38 ||38 ||— ||— |- |Борошно пшеничне ||5 ||5 ||5 ||5 ||— ||— |- |Жир ||5 ||5 ||5 ||5 ||— ||— |- |Сметана ||15 ||10 ||15 ||10 ||— ||— |- |Сіль ||5 ||5 ||5 ||5 ||— ||— |- |Лавровий лист ||0,02 ||0,02 ||0,02 ||0,02 ||— ||— |- |Перець запашний ||0,02 ||0,02 ||0,02 ||0,02 ||— ||— |- |Зелень ||3 ||3 ||2 ||2 ||— ||— |- |Огірковий розсіл (на смак) || || || || || || |- !Вихід !! — !! — !! — !! — !!500 !!500 |} === Приготування === # Приготувати відвар (бульйон) з кісток. # Серце варити окремо до готовності. Потім нарізати шматочками. # Обчистити, промити і нарізати шматочками середньої величини моркву, петрушку, селеру і цибулю, а потім злегка обсмажити. Огірки очиститит від шкірки і сердцевини, нарізати та одночасно з іншими овочами припустити в невеликій кількості відвару. # Нарізати картоплю, покласти у проціджений відвар і варити до напівготовності. Потім додати припущені огірки, злегка обсмажені овочі, а також лавровий лист і перець запашний, сіль, шматочки серця і варити. # Шпинат (або салат) вимити та порізати; борошно підсмажити з жиром. # За 10— 15 хвилин до готовності додати до огірочника порізаний шпинат, та підсмажене борошно. Відпускаючи, покласти в огірочник сметану і посипати зеленню, == Див. також == * [[Рецепт:Солянка|солянка]] == Примітки== {{reflist|30em|refs= <ref name=strukkuhni1951>{{Cite book |title=Страви української кухні |last1=Запорожець |first1=В.П. |last2= |first2 = |publisher=Державне видавництво технічної літератури України |location=Київ |chapter=27. Огірочник по-домашньому |isbn=}}</ref> }} == Посилання == * [https://www.russianfood.com/recipes/recipe.php?rid=33131| Огуречник по-украински]{{ref-ru}} * [http://cook.i.ua/user/4046381/8467/k| Огірочник асорті]{{ref-uk}} {{Українська кухня}} [[Категорія:Рецепти]] [[Категорія:Українська кухня]] nnqusrgxghdpnthpkn32owyblvhx5ff Освоюємо Kotlin/Колекції 0 8367 41409 41333 2026-08-19T14:32:06Z Володимир Груша 985 /* Map */ 41409 wikitext text/x-wiki {{Nav|Освоюємо Kotlin|Колекції|programming|nocat=1}} '''Колекції''' - це набір класів для роботи з даними. Колекції в Kotlin представлені типами List, Set, Map, MutableMap, MutableList, MutableMap та ArrayDeque. Приставка Mutable означає, що колекцію можна змінювати. Прості List, Set та Map - не змінюються. Вміст ArrayDeque також можна змінювати. Робота з колекціями схожа на роботу з масивами. ==List== List - це список елементів одного типу, які можуть повторюватись. <syntaxhighlight lang="kotlin" line start="1"> val numbers = listOf("one", "two", "three", "four") //список String val numbers2 = listOf<String>("one", "two", "three", "four") // можна явно вказати тип елементів списку println("Number of elements: ${numbers.size}") println("Third element: ${numbers.get(2)}") // можна так звертатись до елементу списку println("Fourth element: ${numbers[3]}") //а можна як до масив println("Index of element \"two\" ${numbers.indexOf("two")}") </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Number of elements: 4 Third element: three Fourth element: four Index of element "two" 1 </pre>}} В mutable колекціях ми можемо видаляти елементи, замінювати їх та додавати нові: <syntaxhighlight lang="kotlin" line start="1"> val numbers2 = mutableListOf<String>("one", "two", "three", "four") numbers2.removeAt(1) // видаляємо перший(насправді другий) елемент списку numbers2[0] ="first" //заміняєм нульовий елемент numbers2.set(2, "third") // заміняєм другий елемент списку numbers2.add("fives") // додаємо новий елемент println(numbers2) // [first, three, third, five] </syntaxhighlight> Якщо необхідно на базі List створити новий MutableList, то можна скористатись відповідною функціїю toMutableList(): <syntaxhighlight lang="kotlin" line start="1" highlight=2> val list: List<Int> = listOf(5, 4, 3, 56) val mutableList=list.toMutableList() mutableList.add(90) println(mutableList) // [5, 4, 3, 56, 90] mutableList.remove(4)// можна видалити елемент println(mutableList) // [5, 3, 56, 90] </syntaxhighlight> ==Set== Set - це множина елементів, які не повторюються. Порядок елементів не визначений. null також може бути елементом множини, але лише один раз. Дві колекції Set рівні, якщо вони однакових розмірів і у них ідентичні елементи. <syntaxhighlight lang="kotlin" line start="1"> val numbers = setOf(1, 2, 3, 4) println("Кількість елементів: ${numbers.size}") if (numbers.contains(1)) println("1 є у множині") val numbersBackwards = setOf(4, 3, 2, 1) println("Множини рівні: ${numbers == numbersBackwards}") </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Кількість елементів: 4 1 є у множині Множини рівні: true </pre>}} MutableSet підтриує операції з класу MutableCollection. Реалізація MutableSet за замовчуванням зберігає порядок елементів. Тож функції, що покладаються на порядок елементів як то first() чи last(), повертають передбачуваний результат (перше або останнє значення). {{XNote|При використанні, в якості елементів Set, класів даних (data class), вміст об'єктів буде порівнюватись автоматично і, якщо будуть об'єкти з однаковими властивостями, то включатись в Set буде лише один з цих об'єктів.}} ==Map== Map та MutableMap хоч не є нащадками інтерфейсу Collection, відноситься також до колекцій. Map зберігає значення у вигляді пари ключ-значення. Два об'єкта Map рівні, якщо в них однакові пари, незалежно від їхнього місця в середині Map. <syntaxhighlight lang="kotlin" line start="1"> val numbersMap = mutableMapOf("one" to 1, "two" to 2) numbersMap.put("three", 3) // можна так numbersMap["one"] = 11 // а можна так з квадратними дужками println(numbersMap) // {one=11, two=2, three=3} println("Всі ключі: ${numbersMap.keys}") println("Всі значення: ${numbersMap.values}") if ("one" in numbersMap) println("значення ключа \"one\": ${numbersMap["one"]}") if (11 in numbersMap.values) println("Значення 11 є у map") if (numbersMap.containsValue(11)) println("Значення 11 є у map") // те ж саме </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> {one=11, two=2, three=3} Всі ключі: [one, two, three] Всі значення: [11, 2, 3] значення ключа "one": 11 Значення 11 є у map Значення 11 є у map </pre>}} В колекціях і, зокрема, в Map не обов'язково можуть бути базові типи. Колекція може містити і інші об'єкти створені програмістом. Наприклад, створимо клас машина (Car), який міститиме марку машини, її колір та ціну. Map міститиме певний порядковий номер машини зіставлений з об'єктом Car. <syntaxhighlight lang="kotlin" line start="1"> class Car (val name:String, val color:String, val price:Double){ /** * повертаємо інформацію про назву, колір і ціну машини */ fun getInformation():String = "$name $color $price" } fun main(){ var car1= Car("Honda", "blue", 11000.0) var car2= Car("BMW", "red", 12345.0) var car3= Car("Mersedes", "white", 11550.0) val carMap = mapOf(1 to car1, 2 to car2, 3 to car3) println("Перша машина: "+carMap[1]?.getInformation()) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Перша машина: Honda blue 11000.0 </pre>}} Якщо потрібно пройтись почергово по елементах Map, то можна використати цикл або forEach: <syntaxhighlight lang="kotlin" line start="1"> fun main(){ var propertiesMap=mutableMapOf<String, Boolean>() propertiesMap["Big"]=true propertiesMap["Printable"]=false propertiesMap["Readable"]=true println("Перший спосіб:") for (prop in propertiesMap.entries.iterator()){ println("Key: ${prop.key}, Value: ${prop.value}") } println("Другий спосіб:") propertiesMap.forEach{prop-> println("Key: ${prop.key}, Value: ${prop.value}") } } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Перший спосіб: Key: Big, Value: true Key: Printable, Value: false Key: Readable, Value: true Другий спосіб: Key: Big, Value: true Key: Printable, Value: false Key: Readable, Value: true </pre>}} Можна перевірити чи є певний ключ і, якщо нема, то видати певне значення по замовчуванню: <syntaxhighlight lang="kotlin" line start="1"> val mymap=mutableMapOf( "one" to 1, "two" to 2, "three" to 3) val four=mymap.getOrDefault("four", "unknown number") println (four) </syntaxhighlight> В даному випадку буде виведено на екран unknown number. Можна також, якщо неіснує певний ключ, то записати новий ключ разом і з новим значенням: <syntaxhighlight lang="kotlin" line start="1"> val five =mymap.getOrPut("five"){5} </syntaxhighlight> В даному випадку перевіряється чи є ключ five у колекції, якщо немає то записується разом із значенням 5. ==ArrayDeque== ArrayDeque - це реалізація двохсторонньої черги. Тобто в дану колекцію дані можна додавати як на перед черги так і в кінець. <syntaxhighlight lang="kotlin" line start="1"> val deque = ArrayDeque(listOf(1, 2, 3, 4, 5)) deque.addFirst(0) deque.addLast(6) println(deque) // [0, 1, 2, 3, 4, 5, 6] println(deque.first()) // 0 println(deque.last()) // 6 deque.removeFirst() deque.removeLast() println(deque) // [1, 2, 3, 4, 5] </syntaxhighlight> ==Функції для роботи з колекціями== Стандартна бібліотека Kotlin надає ряд функцій, спеціально створених для роботи з колекціями. Розглянемо деякі з них. ===Функція map=== Функція map() дозволяє трансформувати оригінальну колекцію у нову. При цьому ця лямбда функція проходить по елементах колекції і для кожного елемента повертає результат цієї лямбда функції. В результаті створюється новий список з отриманих значень: Як приклад розглянемо збільшення кожного елементу списку на 5 та на 10. <syntaxhighlight lang="kotlin" line start="1"> fun main(){ val numberList=listOf(1,2,3,4,5) //перший спосіб (збільшуєм у 5 раз) val numberList1=numberList.map{it*5} println(numberList1) // [5, 10, 15, 20, 25] //другий спосіб (збільшуєм у 10 раз) val numberList2=numberList.map{number->//замість it використовуємо назву val myNum=number*10 myNum // останній рядок є присвоюваним значенням } println(numberList2) // [10, 20, 30, 40, 50] } </syntaxhighlight> Функцію можна застосовувати до всіх видів колекцій, включаючи Map. Детальніше [https://kotlinlang.org/docs/collection-transformations.html тут]. ===Сортування колекцій=== Для сортування колекцій як то списки існують функції, що починаються зі слова sort: <syntaxhighlight lang="kotlin" line start="1"> val numberList=listOf(1,4,3,4,2) val sortedList=numberList.sorted() //1 2 3 4 4 val sortedList2=numberList.sortedDescending() //4 4 3 2 1 </syntaxhighlight> Об'єкти можна посортувати за значенням поля: <syntaxhighlight lang="kotlin" line start="1"> data class Car(val name:String, val price:Int) fun main(){ val carList=listOf( Car("Toyota", 500), Car("BMW", 565), Car("Nissan", 456), Car("Honda", 800) ) val sortedCarList=carList.sortedBy { it.price } //вказуємо поле для сортування println(sortedCarList) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> [Car(name=Nissan, price=456), Car(name=Toyota, price=500), Car(name=BMW, price=565), Car(name=Honda, price=800)] </pre>}} ===Фільтрування колекцій=== Ми можемо відфільтруваати вміст колекції за певною умовою використовуючи функцію filter(): <syntaxhighlight lang="kotlin" line start="1"> data class Car(val name:String, val price:Int) fun main(){ val carList=listOf( Car("Toyota", 500), Car("BMW", 565), Car("Nissan", 456), Car("Honda", 800) ) val newCarList=carList.filter{it.price>500} println(newCarList) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> [Car(name=BMW, price=565), Car(name=Honda, price=800)] </pre>}} Детальніше читайте [https://kotlinlang.org/docs/collection-filtering.html тут] ===Пошук в колекціях=== Можна здійснити пошук в колекціях за допомогою функції find(): <syntaxhighlight lang="kotlin" line start="1"> val newCarList=carList.find{it.price==500} </syntaxhighlight> В результаті видасть перший елемент, що співпав з умовою. Якщо необхідно здійснити пошуку з кінця, то використовуємо функцію findLast() ===forEach=== Можна пройтися по всіх елементах колекції з використанням функції forEach: <syntaxhighlight lang="kotlin" line start="1"> carList.forEach{println(it)} </syntaxhighlight> ===Поєднання функцій=== Роботу із вмістом колекцій можна проводити поєднуючи функції ланцюжком, використовуючи оператор <code>.</code>(точку): <syntaxhighlight lang="kotlin" line start="1"> val newList=carList.filter { it.price>500 }.sortedBy{it.price} </syntaxhighlight> [[Категорія:Освоюємо Kotlin]] {{Nav}} 6jykonlsghl6ngncgh7g72fk55x60ok 41410 41409 2026-08-19T14:44:13Z Володимир Груша 985 41410 wikitext text/x-wiki {{Nav|Освоюємо Kotlin|Колекції|programming|nocat=1}} '''Колекції''' - це набір класів для роботи з даними. Колекції в Kotlin представлені типами List, Set, Map, MutableMap, MutableList, MutableMap та ArrayDeque. Приставка Mutable означає, що колекцію можна змінювати. Прості List, Set та Map - не змінюються. Вміст ArrayDeque також можна змінювати. Робота з колекціями схожа на роботу з масивами. ==List== List - це список елементів одного типу, які можуть повторюватись. <syntaxhighlight lang="kotlin" line start="1"> val numbers = listOf("one", "two", "three", "four") //список String val numbers2 = listOf<String>("one", "two", "three", "four") // можна явно вказати тип елементів списку println("Number of elements: ${numbers.size}") println("Third element: ${numbers.get(2)}") // можна так звертатись до елементу списку println("Fourth element: ${numbers[3]}") //а можна як до масив println("Index of element \"two\" ${numbers.indexOf("two")}") </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Number of elements: 4 Third element: three Fourth element: four Index of element "two" 1 </pre>}} В mutable колекціях ми можемо видаляти елементи, замінювати їх та додавати нові: <syntaxhighlight lang="kotlin" line start="1"> val numbers2 = mutableListOf<String>("one", "two", "three", "four") numbers2.removeAt(1) // видаляємо перший(насправді другий) елемент списку numbers2[0] ="first" //заміняєм нульовий елемент numbers2.set(2, "third") // заміняєм другий елемент списку numbers2.add("fives") // додаємо новий елемент println(numbers2) // [first, three, third, five] </syntaxhighlight> Якщо необхідно на базі List створити новий MutableList, то можна скористатись відповідною функціїю toMutableList(): <syntaxhighlight lang="kotlin" line start="1" highlight=2> val list: List<Int> = listOf(5, 4, 3, 56) val mutableList=list.toMutableList() mutableList.add(90) println(mutableList) // [5, 4, 3, 56, 90] mutableList.remove(4)// можна видалити елемент println(mutableList) // [5, 3, 56, 90] </syntaxhighlight> ==Set== Set - це множина елементів, які не повторюються. Порядок елементів не визначений. null також може бути елементом множини, але лише один раз. Дві колекції Set рівні, якщо вони однакових розмірів і у них ідентичні елементи. <syntaxhighlight lang="kotlin" line start="1"> val numbers = setOf(1, 2, 3, 4) println("Кількість елементів: ${numbers.size}") if (numbers.contains(1)) println("1 є у множині") val numbersBackwards = setOf(4, 3, 2, 1) println("Множини рівні: ${numbers == numbersBackwards}") </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Кількість елементів: 4 1 є у множині Множини рівні: true </pre>}} MutableSet підтриує операції з класу MutableCollection. Реалізація MutableSet за замовчуванням зберігає порядок елементів. Тож функції, що покладаються на порядок елементів як то first() чи last(), повертають передбачуваний результат (перше або останнє значення). {{XNote|При використанні, в якості елементів Set, класів даних (data class), вміст об'єктів буде порівнюватись автоматично і, якщо будуть об'єкти з однаковими властивостями, то включатись в Set буде лише один з цих об'єктів.}} ==Map== Map та MutableMap хоч не є нащадками інтерфейсу Collection, відноситься також до колекцій. Map зберігає значення у вигляді пари ключ-значення. Два об'єкта Map рівні, якщо в них однакові пари, незалежно від їхнього місця в середині Map. <syntaxhighlight lang="kotlin" line start="1"> val numbersMap = mutableMapOf("one" to 1, "two" to 2) numbersMap.put("three", 3) // можна так numbersMap["one"] = 11 // а можна так з квадратними дужками println(numbersMap) // {one=11, two=2, three=3} println("Всі ключі: ${numbersMap.keys}") println("Всі значення: ${numbersMap.values}") if ("one" in numbersMap) println("значення ключа \"one\": ${numbersMap["one"]}") if (11 in numbersMap.values) println("Значення 11 є у map") if (numbersMap.containsValue(11)) println("Значення 11 є у map") // те ж саме </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> {one=11, two=2, three=3} Всі ключі: [one, two, three] Всі значення: [11, 2, 3] значення ключа "one": 11 Значення 11 є у map Значення 11 є у map </pre>}} В колекціях і, зокрема, в Map не обов'язково можуть бути базові типи. Колекція може містити і інші об'єкти створені програмістом. Наприклад, створимо клас машина (Car), який міститиме марку машини, її колір та ціну. Map міститиме певний порядковий номер машини зіставлений з об'єктом Car. <syntaxhighlight lang="kotlin" line start="1"> class Car (val name:String, val color:String, val price:Double){ /** * повертаємо інформацію про назву, колір і ціну машини */ fun getInformation():String = "$name $color $price" } fun main(){ var car1= Car("Honda", "blue", 11000.0) var car2= Car("BMW", "red", 12345.0) var car3= Car("Mersedes", "white", 11550.0) val carMap = mapOf(1 to car1, 2 to car2, 3 to car3) println("Перша машина: "+carMap[1]?.getInformation()) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Перша машина: Honda blue 11000.0 </pre>}} Якщо потрібно пройтись почергово по елементах Map, то можна використати цикл або forEach: <syntaxhighlight lang="kotlin" line start="1"> fun main(){ var propertiesMap=mutableMapOf<String, Boolean>() propertiesMap["Big"]=true propertiesMap["Printable"]=false propertiesMap["Readable"]=true println("Перший спосіб:") for (prop in propertiesMap.entries.iterator()){ println("Key: ${prop.key}, Value: ${prop.value}") } println("Другий спосіб:") propertiesMap.forEach{prop-> println("Key: ${prop.key}, Value: ${prop.value}") } } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Перший спосіб: Key: Big, Value: true Key: Printable, Value: false Key: Readable, Value: true Другий спосіб: Key: Big, Value: true Key: Printable, Value: false Key: Readable, Value: true </pre>}} Можна перевірити чи є певний ключ і, якщо нема, то видати певне значення по замовчуванню: <syntaxhighlight lang="kotlin" line start="1"> val mymap=mutableMapOf( "one" to 1, "two" to 2, "three" to 3) val four=mymap.getOrDefault("four", "unknown number") println (four) </syntaxhighlight> В даному випадку буде виведено на екран unknown number. Можна також, якщо неіснує певний ключ, то записати новий ключ разом і з новим значенням: <syntaxhighlight lang="kotlin" line start="1"> val five =mymap.getOrPut("five"){5} </syntaxhighlight> В даному випадку перевіряється чи є ключ five у колекції, якщо немає то записується разом із значенням 5. ==ArrayDeque== ArrayDeque - це реалізація двохсторонньої черги. Тобто в дану колекцію дані можна додавати як на перед черги так і в кінець. <syntaxhighlight lang="kotlin" line start="1"> val deque = ArrayDeque(listOf(1, 2, 3, 4, 5)) deque.addFirst(0) deque.addLast(6) println(deque) // [0, 1, 2, 3, 4, 5, 6] println(deque.first()) // 0 println(deque.last()) // 6 deque.removeFirst() deque.removeLast() println(deque) // [1, 2, 3, 4, 5] </syntaxhighlight> ==Функції для роботи з колекціями== Стандартна бібліотека Kotlin надає ряд функцій, спеціально створених для роботи з колекціями. Розглянемо деякі з них. ===Функція map=== Функція map() дозволяє трансформувати оригінальну колекцію у нову. При цьому ця лямбда функція проходить по елементах колекції і для кожного елемента повертає результат цієї лямбда функції. В результаті створюється новий список з отриманих значень: Як приклад розглянемо збільшення кожного елементу списку на 5 та на 10. <syntaxhighlight lang="kotlin" line start="1"> fun main(){ val numberList=listOf(1,2,3,4,5) //перший спосіб (збільшуєм у 5 раз) val numberList1=numberList.map{it*5} println(numberList1) // [5, 10, 15, 20, 25] //другий спосіб (збільшуєм у 10 раз) val numberList2=numberList.map{number->//замість it використовуємо назву val myNum=number*10 myNum // останній рядок є присвоюваним значенням } println(numberList2) // [10, 20, 30, 40, 50] } </syntaxhighlight> Функцію можна застосовувати до всіх видів колекцій, включаючи Map. Детальніше [https://kotlinlang.org/docs/collection-transformations.html тут]. ===Сортування колекцій=== Для сортування колекцій як то списки існують функції, що починаються зі слова sort: <syntaxhighlight lang="kotlin" line start="1"> val numberList=listOf(1,4,3,4,2) val sortedList=numberList.sorted() //1 2 3 4 4 val sortedList2=numberList.sortedDescending() //4 4 3 2 1 </syntaxhighlight> Об'єкти можна посортувати за значенням поля: <syntaxhighlight lang="kotlin" line start="1"> data class Car(val name:String, val price:Int) fun main(){ val carList=listOf( Car("Toyota", 500), Car("BMW", 565), Car("Nissan", 456), Car("Honda", 800) ) val sortedCarList=carList.sortedBy { it.price } //вказуємо поле для сортування println(sortedCarList) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> [Car(name=Nissan, price=456), Car(name=Toyota, price=500), Car(name=BMW, price=565), Car(name=Honda, price=800)] </pre>}} ===Фільтрування колекцій=== Ми можемо відфільтруваати вміст колекції за певною умовою використовуючи функцію filter(): <syntaxhighlight lang="kotlin" line start="1"> data class Car(val name:String, val price:Int) fun main(){ val carList=listOf( Car("Toyota", 500), Car("BMW", 565), Car("Nissan", 456), Car("Honda", 800) ) val newCarList=carList.filter{it.price>500} println(newCarList) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> [Car(name=BMW, price=565), Car(name=Honda, price=800)] </pre>}} Детальніше читайте [https://kotlinlang.org/docs/collection-filtering.html тут] ===Пошук в колекціях=== Можна здійснити пошук в колекціях за допомогою функції find(): <syntaxhighlight lang="kotlin" line start="1"> val newCarList=carList.find{it.price==500} </syntaxhighlight> В результаті видасть перший елемент, що співпав з умовою. Якщо необхідно здійснити пошуку з кінця, то використовуємо функцію findLast() ===forEach=== Можна пройтися по всіх елементах колекції з використанням функції forEach: <syntaxhighlight lang="kotlin" line start="1"> carList.forEach{println(it)} </syntaxhighlight> ===Поєднання функцій=== Роботу із вмістом колекцій можна проводити поєднуючи функції ланцюжком, використовуючи оператор <code>.</code>(точку): <syntaxhighlight lang="kotlin" line start="1"> val newList=carList.filter { it.price>500 }.sortedBy{it.price} </syntaxhighlight> ==Колекції Kotlin та Java Collection Framework== В середині реалізації Kotlin колекцій лежать відповідні реалізації Java. Так по замовчуванню для List використовується реалізація ArrayList, проте можна використати LinkedList при потребі: <syntaxhighlight lang="kotlin" line start="1"> import java.util.LinkedList val list = LinkedList<Int>(listOf(2, 3, 4)) </syntaxhighlight> [[Категорія:Освоюємо Kotlin]] {{Nav}} jcbdgeut0y7juft1o5ax2oy3so7bbva 41411 41410 2026-08-19T14:49:30Z Володимир Груша 985 /* Колекції Kotlin та Java Collection Framework */ 41411 wikitext text/x-wiki {{Nav|Освоюємо Kotlin|Колекції|programming|nocat=1}} '''Колекції''' - це набір класів для роботи з даними. Колекції в Kotlin представлені типами List, Set, Map, MutableMap, MutableList, MutableMap та ArrayDeque. Приставка Mutable означає, що колекцію можна змінювати. Прості List, Set та Map - не змінюються. Вміст ArrayDeque також можна змінювати. Робота з колекціями схожа на роботу з масивами. ==List== List - це список елементів одного типу, які можуть повторюватись. <syntaxhighlight lang="kotlin" line start="1"> val numbers = listOf("one", "two", "three", "four") //список String val numbers2 = listOf<String>("one", "two", "three", "four") // можна явно вказати тип елементів списку println("Number of elements: ${numbers.size}") println("Third element: ${numbers.get(2)}") // можна так звертатись до елементу списку println("Fourth element: ${numbers[3]}") //а можна як до масив println("Index of element \"two\" ${numbers.indexOf("two")}") </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Number of elements: 4 Third element: three Fourth element: four Index of element "two" 1 </pre>}} В mutable колекціях ми можемо видаляти елементи, замінювати їх та додавати нові: <syntaxhighlight lang="kotlin" line start="1"> val numbers2 = mutableListOf<String>("one", "two", "three", "four") numbers2.removeAt(1) // видаляємо перший(насправді другий) елемент списку numbers2[0] ="first" //заміняєм нульовий елемент numbers2.set(2, "third") // заміняєм другий елемент списку numbers2.add("fives") // додаємо новий елемент println(numbers2) // [first, three, third, five] </syntaxhighlight> Якщо необхідно на базі List створити новий MutableList, то можна скористатись відповідною функціїю toMutableList(): <syntaxhighlight lang="kotlin" line start="1" highlight=2> val list: List<Int> = listOf(5, 4, 3, 56) val mutableList=list.toMutableList() mutableList.add(90) println(mutableList) // [5, 4, 3, 56, 90] mutableList.remove(4)// можна видалити елемент println(mutableList) // [5, 3, 56, 90] </syntaxhighlight> ==Set== Set - це множина елементів, які не повторюються. Порядок елементів не визначений. null також може бути елементом множини, але лише один раз. Дві колекції Set рівні, якщо вони однакових розмірів і у них ідентичні елементи. <syntaxhighlight lang="kotlin" line start="1"> val numbers = setOf(1, 2, 3, 4) println("Кількість елементів: ${numbers.size}") if (numbers.contains(1)) println("1 є у множині") val numbersBackwards = setOf(4, 3, 2, 1) println("Множини рівні: ${numbers == numbersBackwards}") </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Кількість елементів: 4 1 є у множині Множини рівні: true </pre>}} MutableSet підтриує операції з класу MutableCollection. Реалізація MutableSet за замовчуванням зберігає порядок елементів. Тож функції, що покладаються на порядок елементів як то first() чи last(), повертають передбачуваний результат (перше або останнє значення). {{XNote|При використанні, в якості елементів Set, класів даних (data class), вміст об'єктів буде порівнюватись автоматично і, якщо будуть об'єкти з однаковими властивостями, то включатись в Set буде лише один з цих об'єктів.}} ==Map== Map та MutableMap хоч не є нащадками інтерфейсу Collection, відноситься також до колекцій. Map зберігає значення у вигляді пари ключ-значення. Два об'єкта Map рівні, якщо в них однакові пари, незалежно від їхнього місця в середині Map. <syntaxhighlight lang="kotlin" line start="1"> val numbersMap = mutableMapOf("one" to 1, "two" to 2) numbersMap.put("three", 3) // можна так numbersMap["one"] = 11 // а можна так з квадратними дужками println(numbersMap) // {one=11, two=2, three=3} println("Всі ключі: ${numbersMap.keys}") println("Всі значення: ${numbersMap.values}") if ("one" in numbersMap) println("значення ключа \"one\": ${numbersMap["one"]}") if (11 in numbersMap.values) println("Значення 11 є у map") if (numbersMap.containsValue(11)) println("Значення 11 є у map") // те ж саме </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> {one=11, two=2, three=3} Всі ключі: [one, two, three] Всі значення: [11, 2, 3] значення ключа "one": 11 Значення 11 є у map Значення 11 є у map </pre>}} В колекціях і, зокрема, в Map не обов'язково можуть бути базові типи. Колекція може містити і інші об'єкти створені програмістом. Наприклад, створимо клас машина (Car), який міститиме марку машини, її колір та ціну. Map міститиме певний порядковий номер машини зіставлений з об'єктом Car. <syntaxhighlight lang="kotlin" line start="1"> class Car (val name:String, val color:String, val price:Double){ /** * повертаємо інформацію про назву, колір і ціну машини */ fun getInformation():String = "$name $color $price" } fun main(){ var car1= Car("Honda", "blue", 11000.0) var car2= Car("BMW", "red", 12345.0) var car3= Car("Mersedes", "white", 11550.0) val carMap = mapOf(1 to car1, 2 to car2, 3 to car3) println("Перша машина: "+carMap[1]?.getInformation()) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Перша машина: Honda blue 11000.0 </pre>}} Якщо потрібно пройтись почергово по елементах Map, то можна використати цикл або forEach: <syntaxhighlight lang="kotlin" line start="1"> fun main(){ var propertiesMap=mutableMapOf<String, Boolean>() propertiesMap["Big"]=true propertiesMap["Printable"]=false propertiesMap["Readable"]=true println("Перший спосіб:") for (prop in propertiesMap.entries.iterator()){ println("Key: ${prop.key}, Value: ${prop.value}") } println("Другий спосіб:") propertiesMap.forEach{prop-> println("Key: ${prop.key}, Value: ${prop.value}") } } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Перший спосіб: Key: Big, Value: true Key: Printable, Value: false Key: Readable, Value: true Другий спосіб: Key: Big, Value: true Key: Printable, Value: false Key: Readable, Value: true </pre>}} Можна перевірити чи є певний ключ і, якщо нема, то видати певне значення по замовчуванню: <syntaxhighlight lang="kotlin" line start="1"> val mymap=mutableMapOf( "one" to 1, "two" to 2, "three" to 3) val four=mymap.getOrDefault("four", "unknown number") println (four) </syntaxhighlight> В даному випадку буде виведено на екран unknown number. Можна також, якщо неіснує певний ключ, то записати новий ключ разом і з новим значенням: <syntaxhighlight lang="kotlin" line start="1"> val five =mymap.getOrPut("five"){5} </syntaxhighlight> В даному випадку перевіряється чи є ключ five у колекції, якщо немає то записується разом із значенням 5. ==ArrayDeque== ArrayDeque - це реалізація двохсторонньої черги. Тобто в дану колекцію дані можна додавати як на перед черги так і в кінець. <syntaxhighlight lang="kotlin" line start="1"> val deque = ArrayDeque(listOf(1, 2, 3, 4, 5)) deque.addFirst(0) deque.addLast(6) println(deque) // [0, 1, 2, 3, 4, 5, 6] println(deque.first()) // 0 println(deque.last()) // 6 deque.removeFirst() deque.removeLast() println(deque) // [1, 2, 3, 4, 5] </syntaxhighlight> ==Функції для роботи з колекціями== Стандартна бібліотека Kotlin надає ряд функцій, спеціально створених для роботи з колекціями. Розглянемо деякі з них. ===Функція map=== Функція map() дозволяє трансформувати оригінальну колекцію у нову. При цьому ця лямбда функція проходить по елементах колекції і для кожного елемента повертає результат цієї лямбда функції. В результаті створюється новий список з отриманих значень: Як приклад розглянемо збільшення кожного елементу списку на 5 та на 10. <syntaxhighlight lang="kotlin" line start="1"> fun main(){ val numberList=listOf(1,2,3,4,5) //перший спосіб (збільшуєм у 5 раз) val numberList1=numberList.map{it*5} println(numberList1) // [5, 10, 15, 20, 25] //другий спосіб (збільшуєм у 10 раз) val numberList2=numberList.map{number->//замість it використовуємо назву val myNum=number*10 myNum // останній рядок є присвоюваним значенням } println(numberList2) // [10, 20, 30, 40, 50] } </syntaxhighlight> Функцію можна застосовувати до всіх видів колекцій, включаючи Map. Детальніше [https://kotlinlang.org/docs/collection-transformations.html тут]. ===Сортування колекцій=== Для сортування колекцій як то списки існують функції, що починаються зі слова sort: <syntaxhighlight lang="kotlin" line start="1"> val numberList=listOf(1,4,3,4,2) val sortedList=numberList.sorted() //1 2 3 4 4 val sortedList2=numberList.sortedDescending() //4 4 3 2 1 </syntaxhighlight> Об'єкти можна посортувати за значенням поля: <syntaxhighlight lang="kotlin" line start="1"> data class Car(val name:String, val price:Int) fun main(){ val carList=listOf( Car("Toyota", 500), Car("BMW", 565), Car("Nissan", 456), Car("Honda", 800) ) val sortedCarList=carList.sortedBy { it.price } //вказуємо поле для сортування println(sortedCarList) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> [Car(name=Nissan, price=456), Car(name=Toyota, price=500), Car(name=BMW, price=565), Car(name=Honda, price=800)] </pre>}} ===Фільтрування колекцій=== Ми можемо відфільтруваати вміст колекції за певною умовою використовуючи функцію filter(): <syntaxhighlight lang="kotlin" line start="1"> data class Car(val name:String, val price:Int) fun main(){ val carList=listOf( Car("Toyota", 500), Car("BMW", 565), Car("Nissan", 456), Car("Honda", 800) ) val newCarList=carList.filter{it.price>500} println(newCarList) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> [Car(name=BMW, price=565), Car(name=Honda, price=800)] </pre>}} Детальніше читайте [https://kotlinlang.org/docs/collection-filtering.html тут] ===Пошук в колекціях=== Можна здійснити пошук в колекціях за допомогою функції find(): <syntaxhighlight lang="kotlin" line start="1"> val newCarList=carList.find{it.price==500} </syntaxhighlight> В результаті видасть перший елемент, що співпав з умовою. Якщо необхідно здійснити пошуку з кінця, то використовуємо функцію findLast() ===forEach=== Можна пройтися по всіх елементах колекції з використанням функції forEach: <syntaxhighlight lang="kotlin" line start="1"> carList.forEach{println(it)} </syntaxhighlight> ===Поєднання функцій=== Роботу із вмістом колекцій можна проводити поєднуючи функції ланцюжком, використовуючи оператор <code>.</code>(точку): <syntaxhighlight lang="kotlin" line start="1"> val newList=carList.filter { it.price>500 }.sortedBy{it.price} </syntaxhighlight> ==Колекції Kotlin та Java Collection Framework== В середині реалізації Kotlin колекцій лежать відповідні реалізації Java. Так по замовчуванню для List використовується реалізація ArrayList, проте можна використати LinkedList при потребі: <syntaxhighlight lang="kotlin" line start="1"> import java.util.LinkedList Для Set по замовчуванню використовується LinkedHashSet, проте можна використати HashSet та TreeSet. Для Map по замовчуванню використовується LinkedHashMap, проте можна використати HashMap та TreeMap. Детальніше про Java колекції можна почитатаи в [https://uk.wikibooks.org/wiki/Освоюємо Java/Колекції Освоюємо Java/Колекції] </syntaxhighlight> [[Категорія:Освоюємо Kotlin]] {{Nav}} g827hy8p8k0vgqogh4n1ix15pfl4drn 41412 41411 2026-08-19T14:49:47Z Володимир Груша 985 /* Колекції Kotlin та Java Collection Framework */ 41412 wikitext text/x-wiki {{Nav|Освоюємо Kotlin|Колекції|programming|nocat=1}} '''Колекції''' - це набір класів для роботи з даними. Колекції в Kotlin представлені типами List, Set, Map, MutableMap, MutableList, MutableMap та ArrayDeque. Приставка Mutable означає, що колекцію можна змінювати. Прості List, Set та Map - не змінюються. Вміст ArrayDeque також можна змінювати. Робота з колекціями схожа на роботу з масивами. ==List== List - це список елементів одного типу, які можуть повторюватись. <syntaxhighlight lang="kotlin" line start="1"> val numbers = listOf("one", "two", "three", "four") //список String val numbers2 = listOf<String>("one", "two", "three", "four") // можна явно вказати тип елементів списку println("Number of elements: ${numbers.size}") println("Third element: ${numbers.get(2)}") // можна так звертатись до елементу списку println("Fourth element: ${numbers[3]}") //а можна як до масив println("Index of element \"two\" ${numbers.indexOf("two")}") </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Number of elements: 4 Third element: three Fourth element: four Index of element "two" 1 </pre>}} В mutable колекціях ми можемо видаляти елементи, замінювати їх та додавати нові: <syntaxhighlight lang="kotlin" line start="1"> val numbers2 = mutableListOf<String>("one", "two", "three", "four") numbers2.removeAt(1) // видаляємо перший(насправді другий) елемент списку numbers2[0] ="first" //заміняєм нульовий елемент numbers2.set(2, "third") // заміняєм другий елемент списку numbers2.add("fives") // додаємо новий елемент println(numbers2) // [first, three, third, five] </syntaxhighlight> Якщо необхідно на базі List створити новий MutableList, то можна скористатись відповідною функціїю toMutableList(): <syntaxhighlight lang="kotlin" line start="1" highlight=2> val list: List<Int> = listOf(5, 4, 3, 56) val mutableList=list.toMutableList() mutableList.add(90) println(mutableList) // [5, 4, 3, 56, 90] mutableList.remove(4)// можна видалити елемент println(mutableList) // [5, 3, 56, 90] </syntaxhighlight> ==Set== Set - це множина елементів, які не повторюються. Порядок елементів не визначений. null також може бути елементом множини, але лише один раз. Дві колекції Set рівні, якщо вони однакових розмірів і у них ідентичні елементи. <syntaxhighlight lang="kotlin" line start="1"> val numbers = setOf(1, 2, 3, 4) println("Кількість елементів: ${numbers.size}") if (numbers.contains(1)) println("1 є у множині") val numbersBackwards = setOf(4, 3, 2, 1) println("Множини рівні: ${numbers == numbersBackwards}") </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Кількість елементів: 4 1 є у множині Множини рівні: true </pre>}} MutableSet підтриує операції з класу MutableCollection. Реалізація MutableSet за замовчуванням зберігає порядок елементів. Тож функції, що покладаються на порядок елементів як то first() чи last(), повертають передбачуваний результат (перше або останнє значення). {{XNote|При використанні, в якості елементів Set, класів даних (data class), вміст об'єктів буде порівнюватись автоматично і, якщо будуть об'єкти з однаковими властивостями, то включатись в Set буде лише один з цих об'єктів.}} ==Map== Map та MutableMap хоч не є нащадками інтерфейсу Collection, відноситься також до колекцій. Map зберігає значення у вигляді пари ключ-значення. Два об'єкта Map рівні, якщо в них однакові пари, незалежно від їхнього місця в середині Map. <syntaxhighlight lang="kotlin" line start="1"> val numbersMap = mutableMapOf("one" to 1, "two" to 2) numbersMap.put("three", 3) // можна так numbersMap["one"] = 11 // а можна так з квадратними дужками println(numbersMap) // {one=11, two=2, three=3} println("Всі ключі: ${numbersMap.keys}") println("Всі значення: ${numbersMap.values}") if ("one" in numbersMap) println("значення ключа \"one\": ${numbersMap["one"]}") if (11 in numbersMap.values) println("Значення 11 є у map") if (numbersMap.containsValue(11)) println("Значення 11 є у map") // те ж саме </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> {one=11, two=2, three=3} Всі ключі: [one, two, three] Всі значення: [11, 2, 3] значення ключа "one": 11 Значення 11 є у map Значення 11 є у map </pre>}} В колекціях і, зокрема, в Map не обов'язково можуть бути базові типи. Колекція може містити і інші об'єкти створені програмістом. Наприклад, створимо клас машина (Car), який міститиме марку машини, її колір та ціну. Map міститиме певний порядковий номер машини зіставлений з об'єктом Car. <syntaxhighlight lang="kotlin" line start="1"> class Car (val name:String, val color:String, val price:Double){ /** * повертаємо інформацію про назву, колір і ціну машини */ fun getInformation():String = "$name $color $price" } fun main(){ var car1= Car("Honda", "blue", 11000.0) var car2= Car("BMW", "red", 12345.0) var car3= Car("Mersedes", "white", 11550.0) val carMap = mapOf(1 to car1, 2 to car2, 3 to car3) println("Перша машина: "+carMap[1]?.getInformation()) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Перша машина: Honda blue 11000.0 </pre>}} Якщо потрібно пройтись почергово по елементах Map, то можна використати цикл або forEach: <syntaxhighlight lang="kotlin" line start="1"> fun main(){ var propertiesMap=mutableMapOf<String, Boolean>() propertiesMap["Big"]=true propertiesMap["Printable"]=false propertiesMap["Readable"]=true println("Перший спосіб:") for (prop in propertiesMap.entries.iterator()){ println("Key: ${prop.key}, Value: ${prop.value}") } println("Другий спосіб:") propertiesMap.forEach{prop-> println("Key: ${prop.key}, Value: ${prop.value}") } } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Перший спосіб: Key: Big, Value: true Key: Printable, Value: false Key: Readable, Value: true Другий спосіб: Key: Big, Value: true Key: Printable, Value: false Key: Readable, Value: true </pre>}} Можна перевірити чи є певний ключ і, якщо нема, то видати певне значення по замовчуванню: <syntaxhighlight lang="kotlin" line start="1"> val mymap=mutableMapOf( "one" to 1, "two" to 2, "three" to 3) val four=mymap.getOrDefault("four", "unknown number") println (four) </syntaxhighlight> В даному випадку буде виведено на екран unknown number. Можна також, якщо неіснує певний ключ, то записати новий ключ разом і з новим значенням: <syntaxhighlight lang="kotlin" line start="1"> val five =mymap.getOrPut("five"){5} </syntaxhighlight> В даному випадку перевіряється чи є ключ five у колекції, якщо немає то записується разом із значенням 5. ==ArrayDeque== ArrayDeque - це реалізація двохсторонньої черги. Тобто в дану колекцію дані можна додавати як на перед черги так і в кінець. <syntaxhighlight lang="kotlin" line start="1"> val deque = ArrayDeque(listOf(1, 2, 3, 4, 5)) deque.addFirst(0) deque.addLast(6) println(deque) // [0, 1, 2, 3, 4, 5, 6] println(deque.first()) // 0 println(deque.last()) // 6 deque.removeFirst() deque.removeLast() println(deque) // [1, 2, 3, 4, 5] </syntaxhighlight> ==Функції для роботи з колекціями== Стандартна бібліотека Kotlin надає ряд функцій, спеціально створених для роботи з колекціями. Розглянемо деякі з них. ===Функція map=== Функція map() дозволяє трансформувати оригінальну колекцію у нову. При цьому ця лямбда функція проходить по елементах колекції і для кожного елемента повертає результат цієї лямбда функції. В результаті створюється новий список з отриманих значень: Як приклад розглянемо збільшення кожного елементу списку на 5 та на 10. <syntaxhighlight lang="kotlin" line start="1"> fun main(){ val numberList=listOf(1,2,3,4,5) //перший спосіб (збільшуєм у 5 раз) val numberList1=numberList.map{it*5} println(numberList1) // [5, 10, 15, 20, 25] //другий спосіб (збільшуєм у 10 раз) val numberList2=numberList.map{number->//замість it використовуємо назву val myNum=number*10 myNum // останній рядок є присвоюваним значенням } println(numberList2) // [10, 20, 30, 40, 50] } </syntaxhighlight> Функцію можна застосовувати до всіх видів колекцій, включаючи Map. Детальніше [https://kotlinlang.org/docs/collection-transformations.html тут]. ===Сортування колекцій=== Для сортування колекцій як то списки існують функції, що починаються зі слова sort: <syntaxhighlight lang="kotlin" line start="1"> val numberList=listOf(1,4,3,4,2) val sortedList=numberList.sorted() //1 2 3 4 4 val sortedList2=numberList.sortedDescending() //4 4 3 2 1 </syntaxhighlight> Об'єкти можна посортувати за значенням поля: <syntaxhighlight lang="kotlin" line start="1"> data class Car(val name:String, val price:Int) fun main(){ val carList=listOf( Car("Toyota", 500), Car("BMW", 565), Car("Nissan", 456), Car("Honda", 800) ) val sortedCarList=carList.sortedBy { it.price } //вказуємо поле для сортування println(sortedCarList) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> [Car(name=Nissan, price=456), Car(name=Toyota, price=500), Car(name=BMW, price=565), Car(name=Honda, price=800)] </pre>}} ===Фільтрування колекцій=== Ми можемо відфільтруваати вміст колекції за певною умовою використовуючи функцію filter(): <syntaxhighlight lang="kotlin" line start="1"> data class Car(val name:String, val price:Int) fun main(){ val carList=listOf( Car("Toyota", 500), Car("BMW", 565), Car("Nissan", 456), Car("Honda", 800) ) val newCarList=carList.filter{it.price>500} println(newCarList) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> [Car(name=BMW, price=565), Car(name=Honda, price=800)] </pre>}} Детальніше читайте [https://kotlinlang.org/docs/collection-filtering.html тут] ===Пошук в колекціях=== Можна здійснити пошук в колекціях за допомогою функції find(): <syntaxhighlight lang="kotlin" line start="1"> val newCarList=carList.find{it.price==500} </syntaxhighlight> В результаті видасть перший елемент, що співпав з умовою. Якщо необхідно здійснити пошуку з кінця, то використовуємо функцію findLast() ===forEach=== Можна пройтися по всіх елементах колекції з використанням функції forEach: <syntaxhighlight lang="kotlin" line start="1"> carList.forEach{println(it)} </syntaxhighlight> ===Поєднання функцій=== Роботу із вмістом колекцій можна проводити поєднуючи функції ланцюжком, використовуючи оператор <code>.</code>(точку): <syntaxhighlight lang="kotlin" line start="1"> val newList=carList.filter { it.price>500 }.sortedBy{it.price} </syntaxhighlight> ==Колекції Kotlin та Java Collection Framework== В середині реалізації Kotlin колекцій лежать відповідні реалізації Java. Так по замовчуванню для List використовується реалізація ArrayList, проте можна використати LinkedList при потребі: <syntaxhighlight lang="kotlin" line start="1"> import java.util.LinkedList Для Set по замовчуванню використовується LinkedHashSet, проте можна використати HashSet та TreeSet. Для Map по замовчуванню використовується LinkedHashMap, проте можна використати HashMap та TreeMap. Детальніше про Java колекції можна почитатаи в [[https://uk.wikibooks.org/wiki/Освоюємо Java/Колекції Освоюємо Java/Колекції]] </syntaxhighlight> [[Категорія:Освоюємо Kotlin]] {{Nav}} qgwftpy3zm6vwvke3jsjals9xe92k6k 41413 41412 2026-08-19T14:50:32Z Володимир Груша 985 /* Колекції Kotlin та Java Collection Framework */ 41413 wikitext text/x-wiki {{Nav|Освоюємо Kotlin|Колекції|programming|nocat=1}} '''Колекції''' - це набір класів для роботи з даними. Колекції в Kotlin представлені типами List, Set, Map, MutableMap, MutableList, MutableMap та ArrayDeque. Приставка Mutable означає, що колекцію можна змінювати. Прості List, Set та Map - не змінюються. Вміст ArrayDeque також можна змінювати. Робота з колекціями схожа на роботу з масивами. ==List== List - це список елементів одного типу, які можуть повторюватись. <syntaxhighlight lang="kotlin" line start="1"> val numbers = listOf("one", "two", "three", "four") //список String val numbers2 = listOf<String>("one", "two", "three", "four") // можна явно вказати тип елементів списку println("Number of elements: ${numbers.size}") println("Third element: ${numbers.get(2)}") // можна так звертатись до елементу списку println("Fourth element: ${numbers[3]}") //а можна як до масив println("Index of element \"two\" ${numbers.indexOf("two")}") </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Number of elements: 4 Third element: three Fourth element: four Index of element "two" 1 </pre>}} В mutable колекціях ми можемо видаляти елементи, замінювати їх та додавати нові: <syntaxhighlight lang="kotlin" line start="1"> val numbers2 = mutableListOf<String>("one", "two", "three", "four") numbers2.removeAt(1) // видаляємо перший(насправді другий) елемент списку numbers2[0] ="first" //заміняєм нульовий елемент numbers2.set(2, "third") // заміняєм другий елемент списку numbers2.add("fives") // додаємо новий елемент println(numbers2) // [first, three, third, five] </syntaxhighlight> Якщо необхідно на базі List створити новий MutableList, то можна скористатись відповідною функціїю toMutableList(): <syntaxhighlight lang="kotlin" line start="1" highlight=2> val list: List<Int> = listOf(5, 4, 3, 56) val mutableList=list.toMutableList() mutableList.add(90) println(mutableList) // [5, 4, 3, 56, 90] mutableList.remove(4)// можна видалити елемент println(mutableList) // [5, 3, 56, 90] </syntaxhighlight> ==Set== Set - це множина елементів, які не повторюються. Порядок елементів не визначений. null також може бути елементом множини, але лише один раз. Дві колекції Set рівні, якщо вони однакових розмірів і у них ідентичні елементи. <syntaxhighlight lang="kotlin" line start="1"> val numbers = setOf(1, 2, 3, 4) println("Кількість елементів: ${numbers.size}") if (numbers.contains(1)) println("1 є у множині") val numbersBackwards = setOf(4, 3, 2, 1) println("Множини рівні: ${numbers == numbersBackwards}") </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Кількість елементів: 4 1 є у множині Множини рівні: true </pre>}} MutableSet підтриує операції з класу MutableCollection. Реалізація MutableSet за замовчуванням зберігає порядок елементів. Тож функції, що покладаються на порядок елементів як то first() чи last(), повертають передбачуваний результат (перше або останнє значення). {{XNote|При використанні, в якості елементів Set, класів даних (data class), вміст об'єктів буде порівнюватись автоматично і, якщо будуть об'єкти з однаковими властивостями, то включатись в Set буде лише один з цих об'єктів.}} ==Map== Map та MutableMap хоч не є нащадками інтерфейсу Collection, відноситься також до колекцій. Map зберігає значення у вигляді пари ключ-значення. Два об'єкта Map рівні, якщо в них однакові пари, незалежно від їхнього місця в середині Map. <syntaxhighlight lang="kotlin" line start="1"> val numbersMap = mutableMapOf("one" to 1, "two" to 2) numbersMap.put("three", 3) // можна так numbersMap["one"] = 11 // а можна так з квадратними дужками println(numbersMap) // {one=11, two=2, three=3} println("Всі ключі: ${numbersMap.keys}") println("Всі значення: ${numbersMap.values}") if ("one" in numbersMap) println("значення ключа \"one\": ${numbersMap["one"]}") if (11 in numbersMap.values) println("Значення 11 є у map") if (numbersMap.containsValue(11)) println("Значення 11 є у map") // те ж саме </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> {one=11, two=2, three=3} Всі ключі: [one, two, three] Всі значення: [11, 2, 3] значення ключа "one": 11 Значення 11 є у map Значення 11 є у map </pre>}} В колекціях і, зокрема, в Map не обов'язково можуть бути базові типи. Колекція може містити і інші об'єкти створені програмістом. Наприклад, створимо клас машина (Car), який міститиме марку машини, її колір та ціну. Map міститиме певний порядковий номер машини зіставлений з об'єктом Car. <syntaxhighlight lang="kotlin" line start="1"> class Car (val name:String, val color:String, val price:Double){ /** * повертаємо інформацію про назву, колір і ціну машини */ fun getInformation():String = "$name $color $price" } fun main(){ var car1= Car("Honda", "blue", 11000.0) var car2= Car("BMW", "red", 12345.0) var car3= Car("Mersedes", "white", 11550.0) val carMap = mapOf(1 to car1, 2 to car2, 3 to car3) println("Перша машина: "+carMap[1]?.getInformation()) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Перша машина: Honda blue 11000.0 </pre>}} Якщо потрібно пройтись почергово по елементах Map, то можна використати цикл або forEach: <syntaxhighlight lang="kotlin" line start="1"> fun main(){ var propertiesMap=mutableMapOf<String, Boolean>() propertiesMap["Big"]=true propertiesMap["Printable"]=false propertiesMap["Readable"]=true println("Перший спосіб:") for (prop in propertiesMap.entries.iterator()){ println("Key: ${prop.key}, Value: ${prop.value}") } println("Другий спосіб:") propertiesMap.forEach{prop-> println("Key: ${prop.key}, Value: ${prop.value}") } } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Перший спосіб: Key: Big, Value: true Key: Printable, Value: false Key: Readable, Value: true Другий спосіб: Key: Big, Value: true Key: Printable, Value: false Key: Readable, Value: true </pre>}} Можна перевірити чи є певний ключ і, якщо нема, то видати певне значення по замовчуванню: <syntaxhighlight lang="kotlin" line start="1"> val mymap=mutableMapOf( "one" to 1, "two" to 2, "three" to 3) val four=mymap.getOrDefault("four", "unknown number") println (four) </syntaxhighlight> В даному випадку буде виведено на екран unknown number. Можна також, якщо неіснує певний ключ, то записати новий ключ разом і з новим значенням: <syntaxhighlight lang="kotlin" line start="1"> val five =mymap.getOrPut("five"){5} </syntaxhighlight> В даному випадку перевіряється чи є ключ five у колекції, якщо немає то записується разом із значенням 5. ==ArrayDeque== ArrayDeque - це реалізація двохсторонньої черги. Тобто в дану колекцію дані можна додавати як на перед черги так і в кінець. <syntaxhighlight lang="kotlin" line start="1"> val deque = ArrayDeque(listOf(1, 2, 3, 4, 5)) deque.addFirst(0) deque.addLast(6) println(deque) // [0, 1, 2, 3, 4, 5, 6] println(deque.first()) // 0 println(deque.last()) // 6 deque.removeFirst() deque.removeLast() println(deque) // [1, 2, 3, 4, 5] </syntaxhighlight> ==Функції для роботи з колекціями== Стандартна бібліотека Kotlin надає ряд функцій, спеціально створених для роботи з колекціями. Розглянемо деякі з них. ===Функція map=== Функція map() дозволяє трансформувати оригінальну колекцію у нову. При цьому ця лямбда функція проходить по елементах колекції і для кожного елемента повертає результат цієї лямбда функції. В результаті створюється новий список з отриманих значень: Як приклад розглянемо збільшення кожного елементу списку на 5 та на 10. <syntaxhighlight lang="kotlin" line start="1"> fun main(){ val numberList=listOf(1,2,3,4,5) //перший спосіб (збільшуєм у 5 раз) val numberList1=numberList.map{it*5} println(numberList1) // [5, 10, 15, 20, 25] //другий спосіб (збільшуєм у 10 раз) val numberList2=numberList.map{number->//замість it використовуємо назву val myNum=number*10 myNum // останній рядок є присвоюваним значенням } println(numberList2) // [10, 20, 30, 40, 50] } </syntaxhighlight> Функцію можна застосовувати до всіх видів колекцій, включаючи Map. Детальніше [https://kotlinlang.org/docs/collection-transformations.html тут]. ===Сортування колекцій=== Для сортування колекцій як то списки існують функції, що починаються зі слова sort: <syntaxhighlight lang="kotlin" line start="1"> val numberList=listOf(1,4,3,4,2) val sortedList=numberList.sorted() //1 2 3 4 4 val sortedList2=numberList.sortedDescending() //4 4 3 2 1 </syntaxhighlight> Об'єкти можна посортувати за значенням поля: <syntaxhighlight lang="kotlin" line start="1"> data class Car(val name:String, val price:Int) fun main(){ val carList=listOf( Car("Toyota", 500), Car("BMW", 565), Car("Nissan", 456), Car("Honda", 800) ) val sortedCarList=carList.sortedBy { it.price } //вказуємо поле для сортування println(sortedCarList) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> [Car(name=Nissan, price=456), Car(name=Toyota, price=500), Car(name=BMW, price=565), Car(name=Honda, price=800)] </pre>}} ===Фільтрування колекцій=== Ми можемо відфільтруваати вміст колекції за певною умовою використовуючи функцію filter(): <syntaxhighlight lang="kotlin" line start="1"> data class Car(val name:String, val price:Int) fun main(){ val carList=listOf( Car("Toyota", 500), Car("BMW", 565), Car("Nissan", 456), Car("Honda", 800) ) val newCarList=carList.filter{it.price>500} println(newCarList) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> [Car(name=BMW, price=565), Car(name=Honda, price=800)] </pre>}} Детальніше читайте [https://kotlinlang.org/docs/collection-filtering.html тут] ===Пошук в колекціях=== Можна здійснити пошук в колекціях за допомогою функції find(): <syntaxhighlight lang="kotlin" line start="1"> val newCarList=carList.find{it.price==500} </syntaxhighlight> В результаті видасть перший елемент, що співпав з умовою. Якщо необхідно здійснити пошуку з кінця, то використовуємо функцію findLast() ===forEach=== Можна пройтися по всіх елементах колекції з використанням функції forEach: <syntaxhighlight lang="kotlin" line start="1"> carList.forEach{println(it)} </syntaxhighlight> ===Поєднання функцій=== Роботу із вмістом колекцій можна проводити поєднуючи функції ланцюжком, використовуючи оператор <code>.</code>(точку): <syntaxhighlight lang="kotlin" line start="1"> val newList=carList.filter { it.price>500 }.sortedBy{it.price} </syntaxhighlight> ==Колекції Kotlin та Java Collection Framework== В середині реалізації Kotlin колекцій лежать відповідні реалізації Java. Так по замовчуванню для List використовується реалізація ArrayList, проте можна використати LinkedList при потребі: <syntaxhighlight lang="kotlin" line start="1"> import java.util.LinkedList Для Set по замовчуванню використовується LinkedHashSet, проте можна використати HashSet та TreeSet. Для Map по замовчуванню використовується LinkedHashMap, проте можна використати HashMap та TreeMap. Детальніше про Java колекції можна почитатаи в [https://uk.wikibooks.org/wiki/Освоюємо Java/Колекції Освоюємо Java/Колекції] </syntaxhighlight> [[Категорія:Освоюємо Kotlin]] {{Nav}} g827hy8p8k0vgqogh4n1ix15pfl4drn 41414 41413 2026-08-19T14:50:55Z Володимир Груша 985 /* Колекції Kotlin та Java Collection Framework */ 41414 wikitext text/x-wiki {{Nav|Освоюємо Kotlin|Колекції|programming|nocat=1}} '''Колекції''' - це набір класів для роботи з даними. Колекції в Kotlin представлені типами List, Set, Map, MutableMap, MutableList, MutableMap та ArrayDeque. Приставка Mutable означає, що колекцію можна змінювати. Прості List, Set та Map - не змінюються. Вміст ArrayDeque також можна змінювати. Робота з колекціями схожа на роботу з масивами. ==List== List - це список елементів одного типу, які можуть повторюватись. <syntaxhighlight lang="kotlin" line start="1"> val numbers = listOf("one", "two", "three", "four") //список String val numbers2 = listOf<String>("one", "two", "three", "four") // можна явно вказати тип елементів списку println("Number of elements: ${numbers.size}") println("Third element: ${numbers.get(2)}") // можна так звертатись до елементу списку println("Fourth element: ${numbers[3]}") //а можна як до масив println("Index of element \"two\" ${numbers.indexOf("two")}") </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Number of elements: 4 Third element: three Fourth element: four Index of element "two" 1 </pre>}} В mutable колекціях ми можемо видаляти елементи, замінювати їх та додавати нові: <syntaxhighlight lang="kotlin" line start="1"> val numbers2 = mutableListOf<String>("one", "two", "three", "four") numbers2.removeAt(1) // видаляємо перший(насправді другий) елемент списку numbers2[0] ="first" //заміняєм нульовий елемент numbers2.set(2, "third") // заміняєм другий елемент списку numbers2.add("fives") // додаємо новий елемент println(numbers2) // [first, three, third, five] </syntaxhighlight> Якщо необхідно на базі List створити новий MutableList, то можна скористатись відповідною функціїю toMutableList(): <syntaxhighlight lang="kotlin" line start="1" highlight=2> val list: List<Int> = listOf(5, 4, 3, 56) val mutableList=list.toMutableList() mutableList.add(90) println(mutableList) // [5, 4, 3, 56, 90] mutableList.remove(4)// можна видалити елемент println(mutableList) // [5, 3, 56, 90] </syntaxhighlight> ==Set== Set - це множина елементів, які не повторюються. Порядок елементів не визначений. null також може бути елементом множини, але лише один раз. Дві колекції Set рівні, якщо вони однакових розмірів і у них ідентичні елементи. <syntaxhighlight lang="kotlin" line start="1"> val numbers = setOf(1, 2, 3, 4) println("Кількість елементів: ${numbers.size}") if (numbers.contains(1)) println("1 є у множині") val numbersBackwards = setOf(4, 3, 2, 1) println("Множини рівні: ${numbers == numbersBackwards}") </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Кількість елементів: 4 1 є у множині Множини рівні: true </pre>}} MutableSet підтриує операції з класу MutableCollection. Реалізація MutableSet за замовчуванням зберігає порядок елементів. Тож функції, що покладаються на порядок елементів як то first() чи last(), повертають передбачуваний результат (перше або останнє значення). {{XNote|При використанні, в якості елементів Set, класів даних (data class), вміст об'єктів буде порівнюватись автоматично і, якщо будуть об'єкти з однаковими властивостями, то включатись в Set буде лише один з цих об'єктів.}} ==Map== Map та MutableMap хоч не є нащадками інтерфейсу Collection, відноситься також до колекцій. Map зберігає значення у вигляді пари ключ-значення. Два об'єкта Map рівні, якщо в них однакові пари, незалежно від їхнього місця в середині Map. <syntaxhighlight lang="kotlin" line start="1"> val numbersMap = mutableMapOf("one" to 1, "two" to 2) numbersMap.put("three", 3) // можна так numbersMap["one"] = 11 // а можна так з квадратними дужками println(numbersMap) // {one=11, two=2, three=3} println("Всі ключі: ${numbersMap.keys}") println("Всі значення: ${numbersMap.values}") if ("one" in numbersMap) println("значення ключа \"one\": ${numbersMap["one"]}") if (11 in numbersMap.values) println("Значення 11 є у map") if (numbersMap.containsValue(11)) println("Значення 11 є у map") // те ж саме </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> {one=11, two=2, three=3} Всі ключі: [one, two, three] Всі значення: [11, 2, 3] значення ключа "one": 11 Значення 11 є у map Значення 11 є у map </pre>}} В колекціях і, зокрема, в Map не обов'язково можуть бути базові типи. Колекція може містити і інші об'єкти створені програмістом. Наприклад, створимо клас машина (Car), який міститиме марку машини, її колір та ціну. Map міститиме певний порядковий номер машини зіставлений з об'єктом Car. <syntaxhighlight lang="kotlin" line start="1"> class Car (val name:String, val color:String, val price:Double){ /** * повертаємо інформацію про назву, колір і ціну машини */ fun getInformation():String = "$name $color $price" } fun main(){ var car1= Car("Honda", "blue", 11000.0) var car2= Car("BMW", "red", 12345.0) var car3= Car("Mersedes", "white", 11550.0) val carMap = mapOf(1 to car1, 2 to car2, 3 to car3) println("Перша машина: "+carMap[1]?.getInformation()) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Перша машина: Honda blue 11000.0 </pre>}} Якщо потрібно пройтись почергово по елементах Map, то можна використати цикл або forEach: <syntaxhighlight lang="kotlin" line start="1"> fun main(){ var propertiesMap=mutableMapOf<String, Boolean>() propertiesMap["Big"]=true propertiesMap["Printable"]=false propertiesMap["Readable"]=true println("Перший спосіб:") for (prop in propertiesMap.entries.iterator()){ println("Key: ${prop.key}, Value: ${prop.value}") } println("Другий спосіб:") propertiesMap.forEach{prop-> println("Key: ${prop.key}, Value: ${prop.value}") } } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Перший спосіб: Key: Big, Value: true Key: Printable, Value: false Key: Readable, Value: true Другий спосіб: Key: Big, Value: true Key: Printable, Value: false Key: Readable, Value: true </pre>}} Можна перевірити чи є певний ключ і, якщо нема, то видати певне значення по замовчуванню: <syntaxhighlight lang="kotlin" line start="1"> val mymap=mutableMapOf( "one" to 1, "two" to 2, "three" to 3) val four=mymap.getOrDefault("four", "unknown number") println (four) </syntaxhighlight> В даному випадку буде виведено на екран unknown number. Можна також, якщо неіснує певний ключ, то записати новий ключ разом і з новим значенням: <syntaxhighlight lang="kotlin" line start="1"> val five =mymap.getOrPut("five"){5} </syntaxhighlight> В даному випадку перевіряється чи є ключ five у колекції, якщо немає то записується разом із значенням 5. ==ArrayDeque== ArrayDeque - це реалізація двохсторонньої черги. Тобто в дану колекцію дані можна додавати як на перед черги так і в кінець. <syntaxhighlight lang="kotlin" line start="1"> val deque = ArrayDeque(listOf(1, 2, 3, 4, 5)) deque.addFirst(0) deque.addLast(6) println(deque) // [0, 1, 2, 3, 4, 5, 6] println(deque.first()) // 0 println(deque.last()) // 6 deque.removeFirst() deque.removeLast() println(deque) // [1, 2, 3, 4, 5] </syntaxhighlight> ==Функції для роботи з колекціями== Стандартна бібліотека Kotlin надає ряд функцій, спеціально створених для роботи з колекціями. Розглянемо деякі з них. ===Функція map=== Функція map() дозволяє трансформувати оригінальну колекцію у нову. При цьому ця лямбда функція проходить по елементах колекції і для кожного елемента повертає результат цієї лямбда функції. В результаті створюється новий список з отриманих значень: Як приклад розглянемо збільшення кожного елементу списку на 5 та на 10. <syntaxhighlight lang="kotlin" line start="1"> fun main(){ val numberList=listOf(1,2,3,4,5) //перший спосіб (збільшуєм у 5 раз) val numberList1=numberList.map{it*5} println(numberList1) // [5, 10, 15, 20, 25] //другий спосіб (збільшуєм у 10 раз) val numberList2=numberList.map{number->//замість it використовуємо назву val myNum=number*10 myNum // останній рядок є присвоюваним значенням } println(numberList2) // [10, 20, 30, 40, 50] } </syntaxhighlight> Функцію можна застосовувати до всіх видів колекцій, включаючи Map. Детальніше [https://kotlinlang.org/docs/collection-transformations.html тут]. ===Сортування колекцій=== Для сортування колекцій як то списки існують функції, що починаються зі слова sort: <syntaxhighlight lang="kotlin" line start="1"> val numberList=listOf(1,4,3,4,2) val sortedList=numberList.sorted() //1 2 3 4 4 val sortedList2=numberList.sortedDescending() //4 4 3 2 1 </syntaxhighlight> Об'єкти можна посортувати за значенням поля: <syntaxhighlight lang="kotlin" line start="1"> data class Car(val name:String, val price:Int) fun main(){ val carList=listOf( Car("Toyota", 500), Car("BMW", 565), Car("Nissan", 456), Car("Honda", 800) ) val sortedCarList=carList.sortedBy { it.price } //вказуємо поле для сортування println(sortedCarList) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> [Car(name=Nissan, price=456), Car(name=Toyota, price=500), Car(name=BMW, price=565), Car(name=Honda, price=800)] </pre>}} ===Фільтрування колекцій=== Ми можемо відфільтруваати вміст колекції за певною умовою використовуючи функцію filter(): <syntaxhighlight lang="kotlin" line start="1"> data class Car(val name:String, val price:Int) fun main(){ val carList=listOf( Car("Toyota", 500), Car("BMW", 565), Car("Nissan", 456), Car("Honda", 800) ) val newCarList=carList.filter{it.price>500} println(newCarList) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> [Car(name=BMW, price=565), Car(name=Honda, price=800)] </pre>}} Детальніше читайте [https://kotlinlang.org/docs/collection-filtering.html тут] ===Пошук в колекціях=== Можна здійснити пошук в колекціях за допомогою функції find(): <syntaxhighlight lang="kotlin" line start="1"> val newCarList=carList.find{it.price==500} </syntaxhighlight> В результаті видасть перший елемент, що співпав з умовою. Якщо необхідно здійснити пошуку з кінця, то використовуємо функцію findLast() ===forEach=== Можна пройтися по всіх елементах колекції з використанням функції forEach: <syntaxhighlight lang="kotlin" line start="1"> carList.forEach{println(it)} </syntaxhighlight> ===Поєднання функцій=== Роботу із вмістом колекцій можна проводити поєднуючи функції ланцюжком, використовуючи оператор <code>.</code>(точку): <syntaxhighlight lang="kotlin" line start="1"> val newList=carList.filter { it.price>500 }.sortedBy{it.price} </syntaxhighlight> ==Колекції Kotlin та Java Collection Framework== В середині реалізації Kotlin колекцій лежать відповідні реалізації Java. Так по замовчуванню для List використовується реалізація ArrayList, проте можна використати LinkedList при потребі: <syntaxhighlight lang="kotlin" line start="1"> import java.util.LinkedList Для Set по замовчуванню використовується LinkedHashSet, проте можна використати HashSet та TreeSet. Для Map по замовчуванню використовується LinkedHashMap, проте можна використати HashMap та TreeMap. Детальніше про Java колекції можна почитатаи в [https://uk.wikibooks.org/wiki/Освоюємо_Java/Колекції Освоюємо Java/Колекції] </syntaxhighlight> [[Категорія:Освоюємо Kotlin]] {{Nav}} l8f3src3835p8s9j7lj8t1efjwldkyn 41415 41414 2026-08-19T14:52:07Z Володимир Груша 985 /* Колекції Kotlin та Java Collection Framework */ 41415 wikitext text/x-wiki {{Nav|Освоюємо Kotlin|Колекції|programming|nocat=1}} '''Колекції''' - це набір класів для роботи з даними. Колекції в Kotlin представлені типами List, Set, Map, MutableMap, MutableList, MutableMap та ArrayDeque. Приставка Mutable означає, що колекцію можна змінювати. Прості List, Set та Map - не змінюються. Вміст ArrayDeque також можна змінювати. Робота з колекціями схожа на роботу з масивами. ==List== List - це список елементів одного типу, які можуть повторюватись. <syntaxhighlight lang="kotlin" line start="1"> val numbers = listOf("one", "two", "three", "four") //список String val numbers2 = listOf<String>("one", "two", "three", "four") // можна явно вказати тип елементів списку println("Number of elements: ${numbers.size}") println("Third element: ${numbers.get(2)}") // можна так звертатись до елементу списку println("Fourth element: ${numbers[3]}") //а можна як до масив println("Index of element \"two\" ${numbers.indexOf("two")}") </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Number of elements: 4 Third element: three Fourth element: four Index of element "two" 1 </pre>}} В mutable колекціях ми можемо видаляти елементи, замінювати їх та додавати нові: <syntaxhighlight lang="kotlin" line start="1"> val numbers2 = mutableListOf<String>("one", "two", "three", "four") numbers2.removeAt(1) // видаляємо перший(насправді другий) елемент списку numbers2[0] ="first" //заміняєм нульовий елемент numbers2.set(2, "third") // заміняєм другий елемент списку numbers2.add("fives") // додаємо новий елемент println(numbers2) // [first, three, third, five] </syntaxhighlight> Якщо необхідно на базі List створити новий MutableList, то можна скористатись відповідною функціїю toMutableList(): <syntaxhighlight lang="kotlin" line start="1" highlight=2> val list: List<Int> = listOf(5, 4, 3, 56) val mutableList=list.toMutableList() mutableList.add(90) println(mutableList) // [5, 4, 3, 56, 90] mutableList.remove(4)// можна видалити елемент println(mutableList) // [5, 3, 56, 90] </syntaxhighlight> ==Set== Set - це множина елементів, які не повторюються. Порядок елементів не визначений. null також може бути елементом множини, але лише один раз. Дві колекції Set рівні, якщо вони однакових розмірів і у них ідентичні елементи. <syntaxhighlight lang="kotlin" line start="1"> val numbers = setOf(1, 2, 3, 4) println("Кількість елементів: ${numbers.size}") if (numbers.contains(1)) println("1 є у множині") val numbersBackwards = setOf(4, 3, 2, 1) println("Множини рівні: ${numbers == numbersBackwards}") </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Кількість елементів: 4 1 є у множині Множини рівні: true </pre>}} MutableSet підтриує операції з класу MutableCollection. Реалізація MutableSet за замовчуванням зберігає порядок елементів. Тож функції, що покладаються на порядок елементів як то first() чи last(), повертають передбачуваний результат (перше або останнє значення). {{XNote|При використанні, в якості елементів Set, класів даних (data class), вміст об'єктів буде порівнюватись автоматично і, якщо будуть об'єкти з однаковими властивостями, то включатись в Set буде лише один з цих об'єктів.}} ==Map== Map та MutableMap хоч не є нащадками інтерфейсу Collection, відноситься також до колекцій. Map зберігає значення у вигляді пари ключ-значення. Два об'єкта Map рівні, якщо в них однакові пари, незалежно від їхнього місця в середині Map. <syntaxhighlight lang="kotlin" line start="1"> val numbersMap = mutableMapOf("one" to 1, "two" to 2) numbersMap.put("three", 3) // можна так numbersMap["one"] = 11 // а можна так з квадратними дужками println(numbersMap) // {one=11, two=2, three=3} println("Всі ключі: ${numbersMap.keys}") println("Всі значення: ${numbersMap.values}") if ("one" in numbersMap) println("значення ключа \"one\": ${numbersMap["one"]}") if (11 in numbersMap.values) println("Значення 11 є у map") if (numbersMap.containsValue(11)) println("Значення 11 є у map") // те ж саме </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> {one=11, two=2, three=3} Всі ключі: [one, two, three] Всі значення: [11, 2, 3] значення ключа "one": 11 Значення 11 є у map Значення 11 є у map </pre>}} В колекціях і, зокрема, в Map не обов'язково можуть бути базові типи. Колекція може містити і інші об'єкти створені програмістом. Наприклад, створимо клас машина (Car), який міститиме марку машини, її колір та ціну. Map міститиме певний порядковий номер машини зіставлений з об'єктом Car. <syntaxhighlight lang="kotlin" line start="1"> class Car (val name:String, val color:String, val price:Double){ /** * повертаємо інформацію про назву, колір і ціну машини */ fun getInformation():String = "$name $color $price" } fun main(){ var car1= Car("Honda", "blue", 11000.0) var car2= Car("BMW", "red", 12345.0) var car3= Car("Mersedes", "white", 11550.0) val carMap = mapOf(1 to car1, 2 to car2, 3 to car3) println("Перша машина: "+carMap[1]?.getInformation()) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Перша машина: Honda blue 11000.0 </pre>}} Якщо потрібно пройтись почергово по елементах Map, то можна використати цикл або forEach: <syntaxhighlight lang="kotlin" line start="1"> fun main(){ var propertiesMap=mutableMapOf<String, Boolean>() propertiesMap["Big"]=true propertiesMap["Printable"]=false propertiesMap["Readable"]=true println("Перший спосіб:") for (prop in propertiesMap.entries.iterator()){ println("Key: ${prop.key}, Value: ${prop.value}") } println("Другий спосіб:") propertiesMap.forEach{prop-> println("Key: ${prop.key}, Value: ${prop.value}") } } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Перший спосіб: Key: Big, Value: true Key: Printable, Value: false Key: Readable, Value: true Другий спосіб: Key: Big, Value: true Key: Printable, Value: false Key: Readable, Value: true </pre>}} Можна перевірити чи є певний ключ і, якщо нема, то видати певне значення по замовчуванню: <syntaxhighlight lang="kotlin" line start="1"> val mymap=mutableMapOf( "one" to 1, "two" to 2, "three" to 3) val four=mymap.getOrDefault("four", "unknown number") println (four) </syntaxhighlight> В даному випадку буде виведено на екран unknown number. Можна також, якщо неіснує певний ключ, то записати новий ключ разом і з новим значенням: <syntaxhighlight lang="kotlin" line start="1"> val five =mymap.getOrPut("five"){5} </syntaxhighlight> В даному випадку перевіряється чи є ключ five у колекції, якщо немає то записується разом із значенням 5. ==ArrayDeque== ArrayDeque - це реалізація двохсторонньої черги. Тобто в дану колекцію дані можна додавати як на перед черги так і в кінець. <syntaxhighlight lang="kotlin" line start="1"> val deque = ArrayDeque(listOf(1, 2, 3, 4, 5)) deque.addFirst(0) deque.addLast(6) println(deque) // [0, 1, 2, 3, 4, 5, 6] println(deque.first()) // 0 println(deque.last()) // 6 deque.removeFirst() deque.removeLast() println(deque) // [1, 2, 3, 4, 5] </syntaxhighlight> ==Функції для роботи з колекціями== Стандартна бібліотека Kotlin надає ряд функцій, спеціально створених для роботи з колекціями. Розглянемо деякі з них. ===Функція map=== Функція map() дозволяє трансформувати оригінальну колекцію у нову. При цьому ця лямбда функція проходить по елементах колекції і для кожного елемента повертає результат цієї лямбда функції. В результаті створюється новий список з отриманих значень: Як приклад розглянемо збільшення кожного елементу списку на 5 та на 10. <syntaxhighlight lang="kotlin" line start="1"> fun main(){ val numberList=listOf(1,2,3,4,5) //перший спосіб (збільшуєм у 5 раз) val numberList1=numberList.map{it*5} println(numberList1) // [5, 10, 15, 20, 25] //другий спосіб (збільшуєм у 10 раз) val numberList2=numberList.map{number->//замість it використовуємо назву val myNum=number*10 myNum // останній рядок є присвоюваним значенням } println(numberList2) // [10, 20, 30, 40, 50] } </syntaxhighlight> Функцію можна застосовувати до всіх видів колекцій, включаючи Map. Детальніше [https://kotlinlang.org/docs/collection-transformations.html тут]. ===Сортування колекцій=== Для сортування колекцій як то списки існують функції, що починаються зі слова sort: <syntaxhighlight lang="kotlin" line start="1"> val numberList=listOf(1,4,3,4,2) val sortedList=numberList.sorted() //1 2 3 4 4 val sortedList2=numberList.sortedDescending() //4 4 3 2 1 </syntaxhighlight> Об'єкти можна посортувати за значенням поля: <syntaxhighlight lang="kotlin" line start="1"> data class Car(val name:String, val price:Int) fun main(){ val carList=listOf( Car("Toyota", 500), Car("BMW", 565), Car("Nissan", 456), Car("Honda", 800) ) val sortedCarList=carList.sortedBy { it.price } //вказуємо поле для сортування println(sortedCarList) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> [Car(name=Nissan, price=456), Car(name=Toyota, price=500), Car(name=BMW, price=565), Car(name=Honda, price=800)] </pre>}} ===Фільтрування колекцій=== Ми можемо відфільтруваати вміст колекції за певною умовою використовуючи функцію filter(): <syntaxhighlight lang="kotlin" line start="1"> data class Car(val name:String, val price:Int) fun main(){ val carList=listOf( Car("Toyota", 500), Car("BMW", 565), Car("Nissan", 456), Car("Honda", 800) ) val newCarList=carList.filter{it.price>500} println(newCarList) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> [Car(name=BMW, price=565), Car(name=Honda, price=800)] </pre>}} Детальніше читайте [https://kotlinlang.org/docs/collection-filtering.html тут] ===Пошук в колекціях=== Можна здійснити пошук в колекціях за допомогою функції find(): <syntaxhighlight lang="kotlin" line start="1"> val newCarList=carList.find{it.price==500} </syntaxhighlight> В результаті видасть перший елемент, що співпав з умовою. Якщо необхідно здійснити пошуку з кінця, то використовуємо функцію findLast() ===forEach=== Можна пройтися по всіх елементах колекції з використанням функції forEach: <syntaxhighlight lang="kotlin" line start="1"> carList.forEach{println(it)} </syntaxhighlight> ===Поєднання функцій=== Роботу із вмістом колекцій можна проводити поєднуючи функції ланцюжком, використовуючи оператор <code>.</code>(точку): <syntaxhighlight lang="kotlin" line start="1"> val newList=carList.filter { it.price>500 }.sortedBy{it.price} </syntaxhighlight> ==Колекції Kotlin та Java Collection Framework== В середині реалізації Kotlin колекцій лежать відповідні реалізації Java. Так по замовчуванню для List використовується реалізація ArrayList, проте можна використати LinkedList при потребі: <syntaxhighlight lang="kotlin" line start="1"> import java.util.LinkedList Для Set по замовчуванню використовується LinkedHashSet, проте можна використати HashSet та TreeSet. Для Map по замовчуванню використовується LinkedHashMap, проте можна використати HashMap та TreeMap. Детальніше про Java колекції можна почитатаи в [https://uk.wikibooks.org/wiki/Освоюємо_Java/Колекції/ Освоюємо Java/Колекції] </syntaxhighlight> [[Категорія:Освоюємо Kotlin]] {{Nav}} akm0y9k8zhrqr2il96gv77ctdtzi3kc 41416 41415 2026-08-19T14:53:15Z Володимир Груша 985 /* Колекції Kotlin та Java Collection Framework */ 41416 wikitext text/x-wiki {{Nav|Освоюємо Kotlin|Колекції|programming|nocat=1}} '''Колекції''' - це набір класів для роботи з даними. Колекції в Kotlin представлені типами List, Set, Map, MutableMap, MutableList, MutableMap та ArrayDeque. Приставка Mutable означає, що колекцію можна змінювати. Прості List, Set та Map - не змінюються. Вміст ArrayDeque також можна змінювати. Робота з колекціями схожа на роботу з масивами. ==List== List - це список елементів одного типу, які можуть повторюватись. <syntaxhighlight lang="kotlin" line start="1"> val numbers = listOf("one", "two", "three", "four") //список String val numbers2 = listOf<String>("one", "two", "three", "four") // можна явно вказати тип елементів списку println("Number of elements: ${numbers.size}") println("Third element: ${numbers.get(2)}") // можна так звертатись до елементу списку println("Fourth element: ${numbers[3]}") //а можна як до масив println("Index of element \"two\" ${numbers.indexOf("two")}") </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Number of elements: 4 Third element: three Fourth element: four Index of element "two" 1 </pre>}} В mutable колекціях ми можемо видаляти елементи, замінювати їх та додавати нові: <syntaxhighlight lang="kotlin" line start="1"> val numbers2 = mutableListOf<String>("one", "two", "three", "four") numbers2.removeAt(1) // видаляємо перший(насправді другий) елемент списку numbers2[0] ="first" //заміняєм нульовий елемент numbers2.set(2, "third") // заміняєм другий елемент списку numbers2.add("fives") // додаємо новий елемент println(numbers2) // [first, three, third, five] </syntaxhighlight> Якщо необхідно на базі List створити новий MutableList, то можна скористатись відповідною функціїю toMutableList(): <syntaxhighlight lang="kotlin" line start="1" highlight=2> val list: List<Int> = listOf(5, 4, 3, 56) val mutableList=list.toMutableList() mutableList.add(90) println(mutableList) // [5, 4, 3, 56, 90] mutableList.remove(4)// можна видалити елемент println(mutableList) // [5, 3, 56, 90] </syntaxhighlight> ==Set== Set - це множина елементів, які не повторюються. Порядок елементів не визначений. null також може бути елементом множини, але лише один раз. Дві колекції Set рівні, якщо вони однакових розмірів і у них ідентичні елементи. <syntaxhighlight lang="kotlin" line start="1"> val numbers = setOf(1, 2, 3, 4) println("Кількість елементів: ${numbers.size}") if (numbers.contains(1)) println("1 є у множині") val numbersBackwards = setOf(4, 3, 2, 1) println("Множини рівні: ${numbers == numbersBackwards}") </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Кількість елементів: 4 1 є у множині Множини рівні: true </pre>}} MutableSet підтриує операції з класу MutableCollection. Реалізація MutableSet за замовчуванням зберігає порядок елементів. Тож функції, що покладаються на порядок елементів як то first() чи last(), повертають передбачуваний результат (перше або останнє значення). {{XNote|При використанні, в якості елементів Set, класів даних (data class), вміст об'єктів буде порівнюватись автоматично і, якщо будуть об'єкти з однаковими властивостями, то включатись в Set буде лише один з цих об'єктів.}} ==Map== Map та MutableMap хоч не є нащадками інтерфейсу Collection, відноситься також до колекцій. Map зберігає значення у вигляді пари ключ-значення. Два об'єкта Map рівні, якщо в них однакові пари, незалежно від їхнього місця в середині Map. <syntaxhighlight lang="kotlin" line start="1"> val numbersMap = mutableMapOf("one" to 1, "two" to 2) numbersMap.put("three", 3) // можна так numbersMap["one"] = 11 // а можна так з квадратними дужками println(numbersMap) // {one=11, two=2, three=3} println("Всі ключі: ${numbersMap.keys}") println("Всі значення: ${numbersMap.values}") if ("one" in numbersMap) println("значення ключа \"one\": ${numbersMap["one"]}") if (11 in numbersMap.values) println("Значення 11 є у map") if (numbersMap.containsValue(11)) println("Значення 11 є у map") // те ж саме </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> {one=11, two=2, three=3} Всі ключі: [one, two, three] Всі значення: [11, 2, 3] значення ключа "one": 11 Значення 11 є у map Значення 11 є у map </pre>}} В колекціях і, зокрема, в Map не обов'язково можуть бути базові типи. Колекція може містити і інші об'єкти створені програмістом. Наприклад, створимо клас машина (Car), який міститиме марку машини, її колір та ціну. Map міститиме певний порядковий номер машини зіставлений з об'єктом Car. <syntaxhighlight lang="kotlin" line start="1"> class Car (val name:String, val color:String, val price:Double){ /** * повертаємо інформацію про назву, колір і ціну машини */ fun getInformation():String = "$name $color $price" } fun main(){ var car1= Car("Honda", "blue", 11000.0) var car2= Car("BMW", "red", 12345.0) var car3= Car("Mersedes", "white", 11550.0) val carMap = mapOf(1 to car1, 2 to car2, 3 to car3) println("Перша машина: "+carMap[1]?.getInformation()) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Перша машина: Honda blue 11000.0 </pre>}} Якщо потрібно пройтись почергово по елементах Map, то можна використати цикл або forEach: <syntaxhighlight lang="kotlin" line start="1"> fun main(){ var propertiesMap=mutableMapOf<String, Boolean>() propertiesMap["Big"]=true propertiesMap["Printable"]=false propertiesMap["Readable"]=true println("Перший спосіб:") for (prop in propertiesMap.entries.iterator()){ println("Key: ${prop.key}, Value: ${prop.value}") } println("Другий спосіб:") propertiesMap.forEach{prop-> println("Key: ${prop.key}, Value: ${prop.value}") } } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Перший спосіб: Key: Big, Value: true Key: Printable, Value: false Key: Readable, Value: true Другий спосіб: Key: Big, Value: true Key: Printable, Value: false Key: Readable, Value: true </pre>}} Можна перевірити чи є певний ключ і, якщо нема, то видати певне значення по замовчуванню: <syntaxhighlight lang="kotlin" line start="1"> val mymap=mutableMapOf( "one" to 1, "two" to 2, "three" to 3) val four=mymap.getOrDefault("four", "unknown number") println (four) </syntaxhighlight> В даному випадку буде виведено на екран unknown number. Можна також, якщо неіснує певний ключ, то записати новий ключ разом і з новим значенням: <syntaxhighlight lang="kotlin" line start="1"> val five =mymap.getOrPut("five"){5} </syntaxhighlight> В даному випадку перевіряється чи є ключ five у колекції, якщо немає то записується разом із значенням 5. ==ArrayDeque== ArrayDeque - це реалізація двохсторонньої черги. Тобто в дану колекцію дані можна додавати як на перед черги так і в кінець. <syntaxhighlight lang="kotlin" line start="1"> val deque = ArrayDeque(listOf(1, 2, 3, 4, 5)) deque.addFirst(0) deque.addLast(6) println(deque) // [0, 1, 2, 3, 4, 5, 6] println(deque.first()) // 0 println(deque.last()) // 6 deque.removeFirst() deque.removeLast() println(deque) // [1, 2, 3, 4, 5] </syntaxhighlight> ==Функції для роботи з колекціями== Стандартна бібліотека Kotlin надає ряд функцій, спеціально створених для роботи з колекціями. Розглянемо деякі з них. ===Функція map=== Функція map() дозволяє трансформувати оригінальну колекцію у нову. При цьому ця лямбда функція проходить по елементах колекції і для кожного елемента повертає результат цієї лямбда функції. В результаті створюється новий список з отриманих значень: Як приклад розглянемо збільшення кожного елементу списку на 5 та на 10. <syntaxhighlight lang="kotlin" line start="1"> fun main(){ val numberList=listOf(1,2,3,4,5) //перший спосіб (збільшуєм у 5 раз) val numberList1=numberList.map{it*5} println(numberList1) // [5, 10, 15, 20, 25] //другий спосіб (збільшуєм у 10 раз) val numberList2=numberList.map{number->//замість it використовуємо назву val myNum=number*10 myNum // останній рядок є присвоюваним значенням } println(numberList2) // [10, 20, 30, 40, 50] } </syntaxhighlight> Функцію можна застосовувати до всіх видів колекцій, включаючи Map. Детальніше [https://kotlinlang.org/docs/collection-transformations.html тут]. ===Сортування колекцій=== Для сортування колекцій як то списки існують функції, що починаються зі слова sort: <syntaxhighlight lang="kotlin" line start="1"> val numberList=listOf(1,4,3,4,2) val sortedList=numberList.sorted() //1 2 3 4 4 val sortedList2=numberList.sortedDescending() //4 4 3 2 1 </syntaxhighlight> Об'єкти можна посортувати за значенням поля: <syntaxhighlight lang="kotlin" line start="1"> data class Car(val name:String, val price:Int) fun main(){ val carList=listOf( Car("Toyota", 500), Car("BMW", 565), Car("Nissan", 456), Car("Honda", 800) ) val sortedCarList=carList.sortedBy { it.price } //вказуємо поле для сортування println(sortedCarList) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> [Car(name=Nissan, price=456), Car(name=Toyota, price=500), Car(name=BMW, price=565), Car(name=Honda, price=800)] </pre>}} ===Фільтрування колекцій=== Ми можемо відфільтруваати вміст колекції за певною умовою використовуючи функцію filter(): <syntaxhighlight lang="kotlin" line start="1"> data class Car(val name:String, val price:Int) fun main(){ val carList=listOf( Car("Toyota", 500), Car("BMW", 565), Car("Nissan", 456), Car("Honda", 800) ) val newCarList=carList.filter{it.price>500} println(newCarList) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> [Car(name=BMW, price=565), Car(name=Honda, price=800)] </pre>}} Детальніше читайте [https://kotlinlang.org/docs/collection-filtering.html тут] ===Пошук в колекціях=== Можна здійснити пошук в колекціях за допомогою функції find(): <syntaxhighlight lang="kotlin" line start="1"> val newCarList=carList.find{it.price==500} </syntaxhighlight> В результаті видасть перший елемент, що співпав з умовою. Якщо необхідно здійснити пошуку з кінця, то використовуємо функцію findLast() ===forEach=== Можна пройтися по всіх елементах колекції з використанням функції forEach: <syntaxhighlight lang="kotlin" line start="1"> carList.forEach{println(it)} </syntaxhighlight> ===Поєднання функцій=== Роботу із вмістом колекцій можна проводити поєднуючи функції ланцюжком, використовуючи оператор <code>.</code>(точку): <syntaxhighlight lang="kotlin" line start="1"> val newList=carList.filter { it.price>500 }.sortedBy{it.price} </syntaxhighlight> ==Колекції Kotlin та Java Collection Framework== В середині реалізації Kotlin колекцій лежать відповідні реалізації Java. Так по замовчуванню для List використовується реалізація ArrayList, проте можна використати LinkedList при потребі: <syntaxhighlight lang="kotlin" line start="1"> import java.util.LinkedList Для Set по замовчуванню використовується LinkedHashSet, проте можна використати HashSet та TreeSet. Для Map по замовчуванню використовується LinkedHashMap, проте можна використати HashMap та TreeMap. Детальніше про Java колекції можна почитатаи в [https://uk.wikibooks.org/wiki/Освоюємо_Java/Колекції] </syntaxhighlight> [[Категорія:Освоюємо Kotlin]] {{Nav}} 0sdimwl4j80iiqc6h89475goc6uagbd 41417 41416 2026-08-19T14:53:35Z Володимир Груша 985 /* Колекції Kotlin та Java Collection Framework */ 41417 wikitext text/x-wiki {{Nav|Освоюємо Kotlin|Колекції|programming|nocat=1}} '''Колекції''' - це набір класів для роботи з даними. Колекції в Kotlin представлені типами List, Set, Map, MutableMap, MutableList, MutableMap та ArrayDeque. Приставка Mutable означає, що колекцію можна змінювати. Прості List, Set та Map - не змінюються. Вміст ArrayDeque також можна змінювати. Робота з колекціями схожа на роботу з масивами. ==List== List - це список елементів одного типу, які можуть повторюватись. <syntaxhighlight lang="kotlin" line start="1"> val numbers = listOf("one", "two", "three", "four") //список String val numbers2 = listOf<String>("one", "two", "three", "four") // можна явно вказати тип елементів списку println("Number of elements: ${numbers.size}") println("Third element: ${numbers.get(2)}") // можна так звертатись до елементу списку println("Fourth element: ${numbers[3]}") //а можна як до масив println("Index of element \"two\" ${numbers.indexOf("two")}") </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Number of elements: 4 Third element: three Fourth element: four Index of element "two" 1 </pre>}} В mutable колекціях ми можемо видаляти елементи, замінювати їх та додавати нові: <syntaxhighlight lang="kotlin" line start="1"> val numbers2 = mutableListOf<String>("one", "two", "three", "four") numbers2.removeAt(1) // видаляємо перший(насправді другий) елемент списку numbers2[0] ="first" //заміняєм нульовий елемент numbers2.set(2, "third") // заміняєм другий елемент списку numbers2.add("fives") // додаємо новий елемент println(numbers2) // [first, three, third, five] </syntaxhighlight> Якщо необхідно на базі List створити новий MutableList, то можна скористатись відповідною функціїю toMutableList(): <syntaxhighlight lang="kotlin" line start="1" highlight=2> val list: List<Int> = listOf(5, 4, 3, 56) val mutableList=list.toMutableList() mutableList.add(90) println(mutableList) // [5, 4, 3, 56, 90] mutableList.remove(4)// можна видалити елемент println(mutableList) // [5, 3, 56, 90] </syntaxhighlight> ==Set== Set - це множина елементів, які не повторюються. Порядок елементів не визначений. null також може бути елементом множини, але лише один раз. Дві колекції Set рівні, якщо вони однакових розмірів і у них ідентичні елементи. <syntaxhighlight lang="kotlin" line start="1"> val numbers = setOf(1, 2, 3, 4) println("Кількість елементів: ${numbers.size}") if (numbers.contains(1)) println("1 є у множині") val numbersBackwards = setOf(4, 3, 2, 1) println("Множини рівні: ${numbers == numbersBackwards}") </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Кількість елементів: 4 1 є у множині Множини рівні: true </pre>}} MutableSet підтриує операції з класу MutableCollection. Реалізація MutableSet за замовчуванням зберігає порядок елементів. Тож функції, що покладаються на порядок елементів як то first() чи last(), повертають передбачуваний результат (перше або останнє значення). {{XNote|При використанні, в якості елементів Set, класів даних (data class), вміст об'єктів буде порівнюватись автоматично і, якщо будуть об'єкти з однаковими властивостями, то включатись в Set буде лише один з цих об'єктів.}} ==Map== Map та MutableMap хоч не є нащадками інтерфейсу Collection, відноситься також до колекцій. Map зберігає значення у вигляді пари ключ-значення. Два об'єкта Map рівні, якщо в них однакові пари, незалежно від їхнього місця в середині Map. <syntaxhighlight lang="kotlin" line start="1"> val numbersMap = mutableMapOf("one" to 1, "two" to 2) numbersMap.put("three", 3) // можна так numbersMap["one"] = 11 // а можна так з квадратними дужками println(numbersMap) // {one=11, two=2, three=3} println("Всі ключі: ${numbersMap.keys}") println("Всі значення: ${numbersMap.values}") if ("one" in numbersMap) println("значення ключа \"one\": ${numbersMap["one"]}") if (11 in numbersMap.values) println("Значення 11 є у map") if (numbersMap.containsValue(11)) println("Значення 11 є у map") // те ж саме </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> {one=11, two=2, three=3} Всі ключі: [one, two, three] Всі значення: [11, 2, 3] значення ключа "one": 11 Значення 11 є у map Значення 11 є у map </pre>}} В колекціях і, зокрема, в Map не обов'язково можуть бути базові типи. Колекція може містити і інші об'єкти створені програмістом. Наприклад, створимо клас машина (Car), який міститиме марку машини, її колір та ціну. Map міститиме певний порядковий номер машини зіставлений з об'єктом Car. <syntaxhighlight lang="kotlin" line start="1"> class Car (val name:String, val color:String, val price:Double){ /** * повертаємо інформацію про назву, колір і ціну машини */ fun getInformation():String = "$name $color $price" } fun main(){ var car1= Car("Honda", "blue", 11000.0) var car2= Car("BMW", "red", 12345.0) var car3= Car("Mersedes", "white", 11550.0) val carMap = mapOf(1 to car1, 2 to car2, 3 to car3) println("Перша машина: "+carMap[1]?.getInformation()) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Перша машина: Honda blue 11000.0 </pre>}} Якщо потрібно пройтись почергово по елементах Map, то можна використати цикл або forEach: <syntaxhighlight lang="kotlin" line start="1"> fun main(){ var propertiesMap=mutableMapOf<String, Boolean>() propertiesMap["Big"]=true propertiesMap["Printable"]=false propertiesMap["Readable"]=true println("Перший спосіб:") for (prop in propertiesMap.entries.iterator()){ println("Key: ${prop.key}, Value: ${prop.value}") } println("Другий спосіб:") propertiesMap.forEach{prop-> println("Key: ${prop.key}, Value: ${prop.value}") } } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Перший спосіб: Key: Big, Value: true Key: Printable, Value: false Key: Readable, Value: true Другий спосіб: Key: Big, Value: true Key: Printable, Value: false Key: Readable, Value: true </pre>}} Можна перевірити чи є певний ключ і, якщо нема, то видати певне значення по замовчуванню: <syntaxhighlight lang="kotlin" line start="1"> val mymap=mutableMapOf( "one" to 1, "two" to 2, "three" to 3) val four=mymap.getOrDefault("four", "unknown number") println (four) </syntaxhighlight> В даному випадку буде виведено на екран unknown number. Можна також, якщо неіснує певний ключ, то записати новий ключ разом і з новим значенням: <syntaxhighlight lang="kotlin" line start="1"> val five =mymap.getOrPut("five"){5} </syntaxhighlight> В даному випадку перевіряється чи є ключ five у колекції, якщо немає то записується разом із значенням 5. ==ArrayDeque== ArrayDeque - це реалізація двохсторонньої черги. Тобто в дану колекцію дані можна додавати як на перед черги так і в кінець. <syntaxhighlight lang="kotlin" line start="1"> val deque = ArrayDeque(listOf(1, 2, 3, 4, 5)) deque.addFirst(0) deque.addLast(6) println(deque) // [0, 1, 2, 3, 4, 5, 6] println(deque.first()) // 0 println(deque.last()) // 6 deque.removeFirst() deque.removeLast() println(deque) // [1, 2, 3, 4, 5] </syntaxhighlight> ==Функції для роботи з колекціями== Стандартна бібліотека Kotlin надає ряд функцій, спеціально створених для роботи з колекціями. Розглянемо деякі з них. ===Функція map=== Функція map() дозволяє трансформувати оригінальну колекцію у нову. При цьому ця лямбда функція проходить по елементах колекції і для кожного елемента повертає результат цієї лямбда функції. В результаті створюється новий список з отриманих значень: Як приклад розглянемо збільшення кожного елементу списку на 5 та на 10. <syntaxhighlight lang="kotlin" line start="1"> fun main(){ val numberList=listOf(1,2,3,4,5) //перший спосіб (збільшуєм у 5 раз) val numberList1=numberList.map{it*5} println(numberList1) // [5, 10, 15, 20, 25] //другий спосіб (збільшуєм у 10 раз) val numberList2=numberList.map{number->//замість it використовуємо назву val myNum=number*10 myNum // останній рядок є присвоюваним значенням } println(numberList2) // [10, 20, 30, 40, 50] } </syntaxhighlight> Функцію можна застосовувати до всіх видів колекцій, включаючи Map. Детальніше [https://kotlinlang.org/docs/collection-transformations.html тут]. ===Сортування колекцій=== Для сортування колекцій як то списки існують функції, що починаються зі слова sort: <syntaxhighlight lang="kotlin" line start="1"> val numberList=listOf(1,4,3,4,2) val sortedList=numberList.sorted() //1 2 3 4 4 val sortedList2=numberList.sortedDescending() //4 4 3 2 1 </syntaxhighlight> Об'єкти можна посортувати за значенням поля: <syntaxhighlight lang="kotlin" line start="1"> data class Car(val name:String, val price:Int) fun main(){ val carList=listOf( Car("Toyota", 500), Car("BMW", 565), Car("Nissan", 456), Car("Honda", 800) ) val sortedCarList=carList.sortedBy { it.price } //вказуємо поле для сортування println(sortedCarList) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> [Car(name=Nissan, price=456), Car(name=Toyota, price=500), Car(name=BMW, price=565), Car(name=Honda, price=800)] </pre>}} ===Фільтрування колекцій=== Ми можемо відфільтруваати вміст колекції за певною умовою використовуючи функцію filter(): <syntaxhighlight lang="kotlin" line start="1"> data class Car(val name:String, val price:Int) fun main(){ val carList=listOf( Car("Toyota", 500), Car("BMW", 565), Car("Nissan", 456), Car("Honda", 800) ) val newCarList=carList.filter{it.price>500} println(newCarList) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> [Car(name=BMW, price=565), Car(name=Honda, price=800)] </pre>}} Детальніше читайте [https://kotlinlang.org/docs/collection-filtering.html тут] ===Пошук в колекціях=== Можна здійснити пошук в колекціях за допомогою функції find(): <syntaxhighlight lang="kotlin" line start="1"> val newCarList=carList.find{it.price==500} </syntaxhighlight> В результаті видасть перший елемент, що співпав з умовою. Якщо необхідно здійснити пошуку з кінця, то використовуємо функцію findLast() ===forEach=== Можна пройтися по всіх елементах колекції з використанням функції forEach: <syntaxhighlight lang="kotlin" line start="1"> carList.forEach{println(it)} </syntaxhighlight> ===Поєднання функцій=== Роботу із вмістом колекцій можна проводити поєднуючи функції ланцюжком, використовуючи оператор <code>.</code>(точку): <syntaxhighlight lang="kotlin" line start="1"> val newList=carList.filter { it.price>500 }.sortedBy{it.price} </syntaxhighlight> ==Колекції Kotlin та Java Collection Framework== В середині реалізації Kotlin колекцій лежать відповідні реалізації Java. Так по замовчуванню для List використовується реалізація ArrayList, проте можна використати LinkedList при потребі: <syntaxhighlight lang="kotlin" line start="1"> import java.util.LinkedList Для Set по замовчуванню використовується LinkedHashSet, проте можна використати HashSet та TreeSet. Для Map по замовчуванню використовується LinkedHashMap, проте можна використати HashMap та TreeMap. Детальніше про Java колекції можна почитатаи в [Освоюємо_Java/Колекції] </syntaxhighlight> [[Категорія:Освоюємо Kotlin]] {{Nav}} inui92qif6f4kyuapsofwrzetbnwddq 41418 41417 2026-08-19T14:53:53Z Володимир Груша 985 /* Колекції Kotlin та Java Collection Framework */ 41418 wikitext text/x-wiki {{Nav|Освоюємо Kotlin|Колекції|programming|nocat=1}} '''Колекції''' - це набір класів для роботи з даними. Колекції в Kotlin представлені типами List, Set, Map, MutableMap, MutableList, MutableMap та ArrayDeque. Приставка Mutable означає, що колекцію можна змінювати. Прості List, Set та Map - не змінюються. Вміст ArrayDeque також можна змінювати. Робота з колекціями схожа на роботу з масивами. ==List== List - це список елементів одного типу, які можуть повторюватись. <syntaxhighlight lang="kotlin" line start="1"> val numbers = listOf("one", "two", "three", "four") //список String val numbers2 = listOf<String>("one", "two", "three", "four") // можна явно вказати тип елементів списку println("Number of elements: ${numbers.size}") println("Third element: ${numbers.get(2)}") // можна так звертатись до елементу списку println("Fourth element: ${numbers[3]}") //а можна як до масив println("Index of element \"two\" ${numbers.indexOf("two")}") </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Number of elements: 4 Third element: three Fourth element: four Index of element "two" 1 </pre>}} В mutable колекціях ми можемо видаляти елементи, замінювати їх та додавати нові: <syntaxhighlight lang="kotlin" line start="1"> val numbers2 = mutableListOf<String>("one", "two", "three", "four") numbers2.removeAt(1) // видаляємо перший(насправді другий) елемент списку numbers2[0] ="first" //заміняєм нульовий елемент numbers2.set(2, "third") // заміняєм другий елемент списку numbers2.add("fives") // додаємо новий елемент println(numbers2) // [first, three, third, five] </syntaxhighlight> Якщо необхідно на базі List створити новий MutableList, то можна скористатись відповідною функціїю toMutableList(): <syntaxhighlight lang="kotlin" line start="1" highlight=2> val list: List<Int> = listOf(5, 4, 3, 56) val mutableList=list.toMutableList() mutableList.add(90) println(mutableList) // [5, 4, 3, 56, 90] mutableList.remove(4)// можна видалити елемент println(mutableList) // [5, 3, 56, 90] </syntaxhighlight> ==Set== Set - це множина елементів, які не повторюються. Порядок елементів не визначений. null також може бути елементом множини, але лише один раз. Дві колекції Set рівні, якщо вони однакових розмірів і у них ідентичні елементи. <syntaxhighlight lang="kotlin" line start="1"> val numbers = setOf(1, 2, 3, 4) println("Кількість елементів: ${numbers.size}") if (numbers.contains(1)) println("1 є у множині") val numbersBackwards = setOf(4, 3, 2, 1) println("Множини рівні: ${numbers == numbersBackwards}") </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Кількість елементів: 4 1 є у множині Множини рівні: true </pre>}} MutableSet підтриує операції з класу MutableCollection. Реалізація MutableSet за замовчуванням зберігає порядок елементів. Тож функції, що покладаються на порядок елементів як то first() чи last(), повертають передбачуваний результат (перше або останнє значення). {{XNote|При використанні, в якості елементів Set, класів даних (data class), вміст об'єктів буде порівнюватись автоматично і, якщо будуть об'єкти з однаковими властивостями, то включатись в Set буде лише один з цих об'єктів.}} ==Map== Map та MutableMap хоч не є нащадками інтерфейсу Collection, відноситься також до колекцій. Map зберігає значення у вигляді пари ключ-значення. Два об'єкта Map рівні, якщо в них однакові пари, незалежно від їхнього місця в середині Map. <syntaxhighlight lang="kotlin" line start="1"> val numbersMap = mutableMapOf("one" to 1, "two" to 2) numbersMap.put("three", 3) // можна так numbersMap["one"] = 11 // а можна так з квадратними дужками println(numbersMap) // {one=11, two=2, three=3} println("Всі ключі: ${numbersMap.keys}") println("Всі значення: ${numbersMap.values}") if ("one" in numbersMap) println("значення ключа \"one\": ${numbersMap["one"]}") if (11 in numbersMap.values) println("Значення 11 є у map") if (numbersMap.containsValue(11)) println("Значення 11 є у map") // те ж саме </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> {one=11, two=2, three=3} Всі ключі: [one, two, three] Всі значення: [11, 2, 3] значення ключа "one": 11 Значення 11 є у map Значення 11 є у map </pre>}} В колекціях і, зокрема, в Map не обов'язково можуть бути базові типи. Колекція може містити і інші об'єкти створені програмістом. Наприклад, створимо клас машина (Car), який міститиме марку машини, її колір та ціну. Map міститиме певний порядковий номер машини зіставлений з об'єктом Car. <syntaxhighlight lang="kotlin" line start="1"> class Car (val name:String, val color:String, val price:Double){ /** * повертаємо інформацію про назву, колір і ціну машини */ fun getInformation():String = "$name $color $price" } fun main(){ var car1= Car("Honda", "blue", 11000.0) var car2= Car("BMW", "red", 12345.0) var car3= Car("Mersedes", "white", 11550.0) val carMap = mapOf(1 to car1, 2 to car2, 3 to car3) println("Перша машина: "+carMap[1]?.getInformation()) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Перша машина: Honda blue 11000.0 </pre>}} Якщо потрібно пройтись почергово по елементах Map, то можна використати цикл або forEach: <syntaxhighlight lang="kotlin" line start="1"> fun main(){ var propertiesMap=mutableMapOf<String, Boolean>() propertiesMap["Big"]=true propertiesMap["Printable"]=false propertiesMap["Readable"]=true println("Перший спосіб:") for (prop in propertiesMap.entries.iterator()){ println("Key: ${prop.key}, Value: ${prop.value}") } println("Другий спосіб:") propertiesMap.forEach{prop-> println("Key: ${prop.key}, Value: ${prop.value}") } } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Перший спосіб: Key: Big, Value: true Key: Printable, Value: false Key: Readable, Value: true Другий спосіб: Key: Big, Value: true Key: Printable, Value: false Key: Readable, Value: true </pre>}} Можна перевірити чи є певний ключ і, якщо нема, то видати певне значення по замовчуванню: <syntaxhighlight lang="kotlin" line start="1"> val mymap=mutableMapOf( "one" to 1, "two" to 2, "three" to 3) val four=mymap.getOrDefault("four", "unknown number") println (four) </syntaxhighlight> В даному випадку буде виведено на екран unknown number. Можна також, якщо неіснує певний ключ, то записати новий ключ разом і з новим значенням: <syntaxhighlight lang="kotlin" line start="1"> val five =mymap.getOrPut("five"){5} </syntaxhighlight> В даному випадку перевіряється чи є ключ five у колекції, якщо немає то записується разом із значенням 5. ==ArrayDeque== ArrayDeque - це реалізація двохсторонньої черги. Тобто в дану колекцію дані можна додавати як на перед черги так і в кінець. <syntaxhighlight lang="kotlin" line start="1"> val deque = ArrayDeque(listOf(1, 2, 3, 4, 5)) deque.addFirst(0) deque.addLast(6) println(deque) // [0, 1, 2, 3, 4, 5, 6] println(deque.first()) // 0 println(deque.last()) // 6 deque.removeFirst() deque.removeLast() println(deque) // [1, 2, 3, 4, 5] </syntaxhighlight> ==Функції для роботи з колекціями== Стандартна бібліотека Kotlin надає ряд функцій, спеціально створених для роботи з колекціями. Розглянемо деякі з них. ===Функція map=== Функція map() дозволяє трансформувати оригінальну колекцію у нову. При цьому ця лямбда функція проходить по елементах колекції і для кожного елемента повертає результат цієї лямбда функції. В результаті створюється новий список з отриманих значень: Як приклад розглянемо збільшення кожного елементу списку на 5 та на 10. <syntaxhighlight lang="kotlin" line start="1"> fun main(){ val numberList=listOf(1,2,3,4,5) //перший спосіб (збільшуєм у 5 раз) val numberList1=numberList.map{it*5} println(numberList1) // [5, 10, 15, 20, 25] //другий спосіб (збільшуєм у 10 раз) val numberList2=numberList.map{number->//замість it використовуємо назву val myNum=number*10 myNum // останній рядок є присвоюваним значенням } println(numberList2) // [10, 20, 30, 40, 50] } </syntaxhighlight> Функцію можна застосовувати до всіх видів колекцій, включаючи Map. Детальніше [https://kotlinlang.org/docs/collection-transformations.html тут]. ===Сортування колекцій=== Для сортування колекцій як то списки існують функції, що починаються зі слова sort: <syntaxhighlight lang="kotlin" line start="1"> val numberList=listOf(1,4,3,4,2) val sortedList=numberList.sorted() //1 2 3 4 4 val sortedList2=numberList.sortedDescending() //4 4 3 2 1 </syntaxhighlight> Об'єкти можна посортувати за значенням поля: <syntaxhighlight lang="kotlin" line start="1"> data class Car(val name:String, val price:Int) fun main(){ val carList=listOf( Car("Toyota", 500), Car("BMW", 565), Car("Nissan", 456), Car("Honda", 800) ) val sortedCarList=carList.sortedBy { it.price } //вказуємо поле для сортування println(sortedCarList) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> [Car(name=Nissan, price=456), Car(name=Toyota, price=500), Car(name=BMW, price=565), Car(name=Honda, price=800)] </pre>}} ===Фільтрування колекцій=== Ми можемо відфільтруваати вміст колекції за певною умовою використовуючи функцію filter(): <syntaxhighlight lang="kotlin" line start="1"> data class Car(val name:String, val price:Int) fun main(){ val carList=listOf( Car("Toyota", 500), Car("BMW", 565), Car("Nissan", 456), Car("Honda", 800) ) val newCarList=carList.filter{it.price>500} println(newCarList) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> [Car(name=BMW, price=565), Car(name=Honda, price=800)] </pre>}} Детальніше читайте [https://kotlinlang.org/docs/collection-filtering.html тут] ===Пошук в колекціях=== Можна здійснити пошук в колекціях за допомогою функції find(): <syntaxhighlight lang="kotlin" line start="1"> val newCarList=carList.find{it.price==500} </syntaxhighlight> В результаті видасть перший елемент, що співпав з умовою. Якщо необхідно здійснити пошуку з кінця, то використовуємо функцію findLast() ===forEach=== Можна пройтися по всіх елементах колекції з використанням функції forEach: <syntaxhighlight lang="kotlin" line start="1"> carList.forEach{println(it)} </syntaxhighlight> ===Поєднання функцій=== Роботу із вмістом колекцій можна проводити поєднуючи функції ланцюжком, використовуючи оператор <code>.</code>(точку): <syntaxhighlight lang="kotlin" line start="1"> val newList=carList.filter { it.price>500 }.sortedBy{it.price} </syntaxhighlight> ==Колекції Kotlin та Java Collection Framework== В середині реалізації Kotlin колекцій лежать відповідні реалізації Java. Так по замовчуванню для List використовується реалізація ArrayList, проте можна використати LinkedList при потребі: <syntaxhighlight lang="kotlin" line start="1"> import java.util.LinkedList Для Set по замовчуванню використовується LinkedHashSet, проте можна використати HashSet та TreeSet. Для Map по замовчуванню використовується LinkedHashMap, проте можна використати HashMap та TreeMap. Детальніше про Java колекції можна почитатаи в [[Освоюємо_Java/Колекції]] </syntaxhighlight> [[Категорія:Освоюємо Kotlin]] {{Nav}} knd3tj5ar6c3pkhg16kd9i5a6dl1vy5 41419 41418 2026-08-19T14:54:51Z Володимир Груша 985 /* Колекції Kotlin та Java Collection Framework */ 41419 wikitext text/x-wiki {{Nav|Освоюємо Kotlin|Колекції|programming|nocat=1}} '''Колекції''' - це набір класів для роботи з даними. Колекції в Kotlin представлені типами List, Set, Map, MutableMap, MutableList, MutableMap та ArrayDeque. Приставка Mutable означає, що колекцію можна змінювати. Прості List, Set та Map - не змінюються. Вміст ArrayDeque також можна змінювати. Робота з колекціями схожа на роботу з масивами. ==List== List - це список елементів одного типу, які можуть повторюватись. <syntaxhighlight lang="kotlin" line start="1"> val numbers = listOf("one", "two", "three", "four") //список String val numbers2 = listOf<String>("one", "two", "three", "four") // можна явно вказати тип елементів списку println("Number of elements: ${numbers.size}") println("Third element: ${numbers.get(2)}") // можна так звертатись до елементу списку println("Fourth element: ${numbers[3]}") //а можна як до масив println("Index of element \"two\" ${numbers.indexOf("two")}") </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Number of elements: 4 Third element: three Fourth element: four Index of element "two" 1 </pre>}} В mutable колекціях ми можемо видаляти елементи, замінювати їх та додавати нові: <syntaxhighlight lang="kotlin" line start="1"> val numbers2 = mutableListOf<String>("one", "two", "three", "four") numbers2.removeAt(1) // видаляємо перший(насправді другий) елемент списку numbers2[0] ="first" //заміняєм нульовий елемент numbers2.set(2, "third") // заміняєм другий елемент списку numbers2.add("fives") // додаємо новий елемент println(numbers2) // [first, three, third, five] </syntaxhighlight> Якщо необхідно на базі List створити новий MutableList, то можна скористатись відповідною функціїю toMutableList(): <syntaxhighlight lang="kotlin" line start="1" highlight=2> val list: List<Int> = listOf(5, 4, 3, 56) val mutableList=list.toMutableList() mutableList.add(90) println(mutableList) // [5, 4, 3, 56, 90] mutableList.remove(4)// можна видалити елемент println(mutableList) // [5, 3, 56, 90] </syntaxhighlight> ==Set== Set - це множина елементів, які не повторюються. Порядок елементів не визначений. null також може бути елементом множини, але лише один раз. Дві колекції Set рівні, якщо вони однакових розмірів і у них ідентичні елементи. <syntaxhighlight lang="kotlin" line start="1"> val numbers = setOf(1, 2, 3, 4) println("Кількість елементів: ${numbers.size}") if (numbers.contains(1)) println("1 є у множині") val numbersBackwards = setOf(4, 3, 2, 1) println("Множини рівні: ${numbers == numbersBackwards}") </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Кількість елементів: 4 1 є у множині Множини рівні: true </pre>}} MutableSet підтриує операції з класу MutableCollection. Реалізація MutableSet за замовчуванням зберігає порядок елементів. Тож функції, що покладаються на порядок елементів як то first() чи last(), повертають передбачуваний результат (перше або останнє значення). {{XNote|При використанні, в якості елементів Set, класів даних (data class), вміст об'єктів буде порівнюватись автоматично і, якщо будуть об'єкти з однаковими властивостями, то включатись в Set буде лише один з цих об'єктів.}} ==Map== Map та MutableMap хоч не є нащадками інтерфейсу Collection, відноситься також до колекцій. Map зберігає значення у вигляді пари ключ-значення. Два об'єкта Map рівні, якщо в них однакові пари, незалежно від їхнього місця в середині Map. <syntaxhighlight lang="kotlin" line start="1"> val numbersMap = mutableMapOf("one" to 1, "two" to 2) numbersMap.put("three", 3) // можна так numbersMap["one"] = 11 // а можна так з квадратними дужками println(numbersMap) // {one=11, two=2, three=3} println("Всі ключі: ${numbersMap.keys}") println("Всі значення: ${numbersMap.values}") if ("one" in numbersMap) println("значення ключа \"one\": ${numbersMap["one"]}") if (11 in numbersMap.values) println("Значення 11 є у map") if (numbersMap.containsValue(11)) println("Значення 11 є у map") // те ж саме </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> {one=11, two=2, three=3} Всі ключі: [one, two, three] Всі значення: [11, 2, 3] значення ключа "one": 11 Значення 11 є у map Значення 11 є у map </pre>}} В колекціях і, зокрема, в Map не обов'язково можуть бути базові типи. Колекція може містити і інші об'єкти створені програмістом. Наприклад, створимо клас машина (Car), який міститиме марку машини, її колір та ціну. Map міститиме певний порядковий номер машини зіставлений з об'єктом Car. <syntaxhighlight lang="kotlin" line start="1"> class Car (val name:String, val color:String, val price:Double){ /** * повертаємо інформацію про назву, колір і ціну машини */ fun getInformation():String = "$name $color $price" } fun main(){ var car1= Car("Honda", "blue", 11000.0) var car2= Car("BMW", "red", 12345.0) var car3= Car("Mersedes", "white", 11550.0) val carMap = mapOf(1 to car1, 2 to car2, 3 to car3) println("Перша машина: "+carMap[1]?.getInformation()) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Перша машина: Honda blue 11000.0 </pre>}} Якщо потрібно пройтись почергово по елементах Map, то можна використати цикл або forEach: <syntaxhighlight lang="kotlin" line start="1"> fun main(){ var propertiesMap=mutableMapOf<String, Boolean>() propertiesMap["Big"]=true propertiesMap["Printable"]=false propertiesMap["Readable"]=true println("Перший спосіб:") for (prop in propertiesMap.entries.iterator()){ println("Key: ${prop.key}, Value: ${prop.value}") } println("Другий спосіб:") propertiesMap.forEach{prop-> println("Key: ${prop.key}, Value: ${prop.value}") } } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Перший спосіб: Key: Big, Value: true Key: Printable, Value: false Key: Readable, Value: true Другий спосіб: Key: Big, Value: true Key: Printable, Value: false Key: Readable, Value: true </pre>}} Можна перевірити чи є певний ключ і, якщо нема, то видати певне значення по замовчуванню: <syntaxhighlight lang="kotlin" line start="1"> val mymap=mutableMapOf( "one" to 1, "two" to 2, "three" to 3) val four=mymap.getOrDefault("four", "unknown number") println (four) </syntaxhighlight> В даному випадку буде виведено на екран unknown number. Можна також, якщо неіснує певний ключ, то записати новий ключ разом і з новим значенням: <syntaxhighlight lang="kotlin" line start="1"> val five =mymap.getOrPut("five"){5} </syntaxhighlight> В даному випадку перевіряється чи є ключ five у колекції, якщо немає то записується разом із значенням 5. ==ArrayDeque== ArrayDeque - це реалізація двохсторонньої черги. Тобто в дану колекцію дані можна додавати як на перед черги так і в кінець. <syntaxhighlight lang="kotlin" line start="1"> val deque = ArrayDeque(listOf(1, 2, 3, 4, 5)) deque.addFirst(0) deque.addLast(6) println(deque) // [0, 1, 2, 3, 4, 5, 6] println(deque.first()) // 0 println(deque.last()) // 6 deque.removeFirst() deque.removeLast() println(deque) // [1, 2, 3, 4, 5] </syntaxhighlight> ==Функції для роботи з колекціями== Стандартна бібліотека Kotlin надає ряд функцій, спеціально створених для роботи з колекціями. Розглянемо деякі з них. ===Функція map=== Функція map() дозволяє трансформувати оригінальну колекцію у нову. При цьому ця лямбда функція проходить по елементах колекції і для кожного елемента повертає результат цієї лямбда функції. В результаті створюється новий список з отриманих значень: Як приклад розглянемо збільшення кожного елементу списку на 5 та на 10. <syntaxhighlight lang="kotlin" line start="1"> fun main(){ val numberList=listOf(1,2,3,4,5) //перший спосіб (збільшуєм у 5 раз) val numberList1=numberList.map{it*5} println(numberList1) // [5, 10, 15, 20, 25] //другий спосіб (збільшуєм у 10 раз) val numberList2=numberList.map{number->//замість it використовуємо назву val myNum=number*10 myNum // останній рядок є присвоюваним значенням } println(numberList2) // [10, 20, 30, 40, 50] } </syntaxhighlight> Функцію можна застосовувати до всіх видів колекцій, включаючи Map. Детальніше [https://kotlinlang.org/docs/collection-transformations.html тут]. ===Сортування колекцій=== Для сортування колекцій як то списки існують функції, що починаються зі слова sort: <syntaxhighlight lang="kotlin" line start="1"> val numberList=listOf(1,4,3,4,2) val sortedList=numberList.sorted() //1 2 3 4 4 val sortedList2=numberList.sortedDescending() //4 4 3 2 1 </syntaxhighlight> Об'єкти можна посортувати за значенням поля: <syntaxhighlight lang="kotlin" line start="1"> data class Car(val name:String, val price:Int) fun main(){ val carList=listOf( Car("Toyota", 500), Car("BMW", 565), Car("Nissan", 456), Car("Honda", 800) ) val sortedCarList=carList.sortedBy { it.price } //вказуємо поле для сортування println(sortedCarList) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> [Car(name=Nissan, price=456), Car(name=Toyota, price=500), Car(name=BMW, price=565), Car(name=Honda, price=800)] </pre>}} ===Фільтрування колекцій=== Ми можемо відфільтруваати вміст колекції за певною умовою використовуючи функцію filter(): <syntaxhighlight lang="kotlin" line start="1"> data class Car(val name:String, val price:Int) fun main(){ val carList=listOf( Car("Toyota", 500), Car("BMW", 565), Car("Nissan", 456), Car("Honda", 800) ) val newCarList=carList.filter{it.price>500} println(newCarList) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> [Car(name=BMW, price=565), Car(name=Honda, price=800)] </pre>}} Детальніше читайте [https://kotlinlang.org/docs/collection-filtering.html тут] ===Пошук в колекціях=== Можна здійснити пошук в колекціях за допомогою функції find(): <syntaxhighlight lang="kotlin" line start="1"> val newCarList=carList.find{it.price==500} </syntaxhighlight> В результаті видасть перший елемент, що співпав з умовою. Якщо необхідно здійснити пошуку з кінця, то використовуємо функцію findLast() ===forEach=== Можна пройтися по всіх елементах колекції з використанням функції forEach: <syntaxhighlight lang="kotlin" line start="1"> carList.forEach{println(it)} </syntaxhighlight> ===Поєднання функцій=== Роботу із вмістом колекцій можна проводити поєднуючи функції ланцюжком, використовуючи оператор <code>.</code>(точку): <syntaxhighlight lang="kotlin" line start="1"> val newList=carList.filter { it.price>500 }.sortedBy{it.price} </syntaxhighlight> ==Колекції Kotlin та Java Collection Framework== В середині реалізації Kotlin колекцій лежать відповідні реалізації Java. Так по замовчуванню для List використовується реалізація ArrayList, проте можна використати LinkedList при потребі: <syntaxhighlight lang="kotlin" line start="1"> import java.util.LinkedList Для Set по замовчуванню використовується LinkedHashSet, проте можна використати HashSet та TreeSet. Для Map по замовчуванню використовується LinkedHashMap, проте можна використати HashMap та TreeMap. Детальніше про Java колекції можна почитатаи в [[Освоюємо Java/Колекції]] </syntaxhighlight> [[Категорія:Освоюємо Kotlin]] {{Nav}} 6eg5lncrbwkm8ak7and43vwstaezdoo 41420 41419 2026-08-19T14:56:10Z Володимир Груша 985 /* Колекції Kotlin та Java Collection Framework */ 41420 wikitext text/x-wiki {{Nav|Освоюємо Kotlin|Колекції|programming|nocat=1}} '''Колекції''' - це набір класів для роботи з даними. Колекції в Kotlin представлені типами List, Set, Map, MutableMap, MutableList, MutableMap та ArrayDeque. Приставка Mutable означає, що колекцію можна змінювати. Прості List, Set та Map - не змінюються. Вміст ArrayDeque також можна змінювати. Робота з колекціями схожа на роботу з масивами. ==List== List - це список елементів одного типу, які можуть повторюватись. <syntaxhighlight lang="kotlin" line start="1"> val numbers = listOf("one", "two", "three", "four") //список String val numbers2 = listOf<String>("one", "two", "three", "four") // можна явно вказати тип елементів списку println("Number of elements: ${numbers.size}") println("Third element: ${numbers.get(2)}") // можна так звертатись до елементу списку println("Fourth element: ${numbers[3]}") //а можна як до масив println("Index of element \"two\" ${numbers.indexOf("two")}") </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Number of elements: 4 Third element: three Fourth element: four Index of element "two" 1 </pre>}} В mutable колекціях ми можемо видаляти елементи, замінювати їх та додавати нові: <syntaxhighlight lang="kotlin" line start="1"> val numbers2 = mutableListOf<String>("one", "two", "three", "four") numbers2.removeAt(1) // видаляємо перший(насправді другий) елемент списку numbers2[0] ="first" //заміняєм нульовий елемент numbers2.set(2, "third") // заміняєм другий елемент списку numbers2.add("fives") // додаємо новий елемент println(numbers2) // [first, three, third, five] </syntaxhighlight> Якщо необхідно на базі List створити новий MutableList, то можна скористатись відповідною функціїю toMutableList(): <syntaxhighlight lang="kotlin" line start="1" highlight=2> val list: List<Int> = listOf(5, 4, 3, 56) val mutableList=list.toMutableList() mutableList.add(90) println(mutableList) // [5, 4, 3, 56, 90] mutableList.remove(4)// можна видалити елемент println(mutableList) // [5, 3, 56, 90] </syntaxhighlight> ==Set== Set - це множина елементів, які не повторюються. Порядок елементів не визначений. null також може бути елементом множини, але лише один раз. Дві колекції Set рівні, якщо вони однакових розмірів і у них ідентичні елементи. <syntaxhighlight lang="kotlin" line start="1"> val numbers = setOf(1, 2, 3, 4) println("Кількість елементів: ${numbers.size}") if (numbers.contains(1)) println("1 є у множині") val numbersBackwards = setOf(4, 3, 2, 1) println("Множини рівні: ${numbers == numbersBackwards}") </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Кількість елементів: 4 1 є у множині Множини рівні: true </pre>}} MutableSet підтриує операції з класу MutableCollection. Реалізація MutableSet за замовчуванням зберігає порядок елементів. Тож функції, що покладаються на порядок елементів як то first() чи last(), повертають передбачуваний результат (перше або останнє значення). {{XNote|При використанні, в якості елементів Set, класів даних (data class), вміст об'єктів буде порівнюватись автоматично і, якщо будуть об'єкти з однаковими властивостями, то включатись в Set буде лише один з цих об'єктів.}} ==Map== Map та MutableMap хоч не є нащадками інтерфейсу Collection, відноситься також до колекцій. Map зберігає значення у вигляді пари ключ-значення. Два об'єкта Map рівні, якщо в них однакові пари, незалежно від їхнього місця в середині Map. <syntaxhighlight lang="kotlin" line start="1"> val numbersMap = mutableMapOf("one" to 1, "two" to 2) numbersMap.put("three", 3) // можна так numbersMap["one"] = 11 // а можна так з квадратними дужками println(numbersMap) // {one=11, two=2, three=3} println("Всі ключі: ${numbersMap.keys}") println("Всі значення: ${numbersMap.values}") if ("one" in numbersMap) println("значення ключа \"one\": ${numbersMap["one"]}") if (11 in numbersMap.values) println("Значення 11 є у map") if (numbersMap.containsValue(11)) println("Значення 11 є у map") // те ж саме </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> {one=11, two=2, three=3} Всі ключі: [one, two, three] Всі значення: [11, 2, 3] значення ключа "one": 11 Значення 11 є у map Значення 11 є у map </pre>}} В колекціях і, зокрема, в Map не обов'язково можуть бути базові типи. Колекція може містити і інші об'єкти створені програмістом. Наприклад, створимо клас машина (Car), який міститиме марку машини, її колір та ціну. Map міститиме певний порядковий номер машини зіставлений з об'єктом Car. <syntaxhighlight lang="kotlin" line start="1"> class Car (val name:String, val color:String, val price:Double){ /** * повертаємо інформацію про назву, колір і ціну машини */ fun getInformation():String = "$name $color $price" } fun main(){ var car1= Car("Honda", "blue", 11000.0) var car2= Car("BMW", "red", 12345.0) var car3= Car("Mersedes", "white", 11550.0) val carMap = mapOf(1 to car1, 2 to car2, 3 to car3) println("Перша машина: "+carMap[1]?.getInformation()) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Перша машина: Honda blue 11000.0 </pre>}} Якщо потрібно пройтись почергово по елементах Map, то можна використати цикл або forEach: <syntaxhighlight lang="kotlin" line start="1"> fun main(){ var propertiesMap=mutableMapOf<String, Boolean>() propertiesMap["Big"]=true propertiesMap["Printable"]=false propertiesMap["Readable"]=true println("Перший спосіб:") for (prop in propertiesMap.entries.iterator()){ println("Key: ${prop.key}, Value: ${prop.value}") } println("Другий спосіб:") propertiesMap.forEach{prop-> println("Key: ${prop.key}, Value: ${prop.value}") } } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Перший спосіб: Key: Big, Value: true Key: Printable, Value: false Key: Readable, Value: true Другий спосіб: Key: Big, Value: true Key: Printable, Value: false Key: Readable, Value: true </pre>}} Можна перевірити чи є певний ключ і, якщо нема, то видати певне значення по замовчуванню: <syntaxhighlight lang="kotlin" line start="1"> val mymap=mutableMapOf( "one" to 1, "two" to 2, "three" to 3) val four=mymap.getOrDefault("four", "unknown number") println (four) </syntaxhighlight> В даному випадку буде виведено на екран unknown number. Можна також, якщо неіснує певний ключ, то записати новий ключ разом і з новим значенням: <syntaxhighlight lang="kotlin" line start="1"> val five =mymap.getOrPut("five"){5} </syntaxhighlight> В даному випадку перевіряється чи є ключ five у колекції, якщо немає то записується разом із значенням 5. ==ArrayDeque== ArrayDeque - це реалізація двохсторонньої черги. Тобто в дану колекцію дані можна додавати як на перед черги так і в кінець. <syntaxhighlight lang="kotlin" line start="1"> val deque = ArrayDeque(listOf(1, 2, 3, 4, 5)) deque.addFirst(0) deque.addLast(6) println(deque) // [0, 1, 2, 3, 4, 5, 6] println(deque.first()) // 0 println(deque.last()) // 6 deque.removeFirst() deque.removeLast() println(deque) // [1, 2, 3, 4, 5] </syntaxhighlight> ==Функції для роботи з колекціями== Стандартна бібліотека Kotlin надає ряд функцій, спеціально створених для роботи з колекціями. Розглянемо деякі з них. ===Функція map=== Функція map() дозволяє трансформувати оригінальну колекцію у нову. При цьому ця лямбда функція проходить по елементах колекції і для кожного елемента повертає результат цієї лямбда функції. В результаті створюється новий список з отриманих значень: Як приклад розглянемо збільшення кожного елементу списку на 5 та на 10. <syntaxhighlight lang="kotlin" line start="1"> fun main(){ val numberList=listOf(1,2,3,4,5) //перший спосіб (збільшуєм у 5 раз) val numberList1=numberList.map{it*5} println(numberList1) // [5, 10, 15, 20, 25] //другий спосіб (збільшуєм у 10 раз) val numberList2=numberList.map{number->//замість it використовуємо назву val myNum=number*10 myNum // останній рядок є присвоюваним значенням } println(numberList2) // [10, 20, 30, 40, 50] } </syntaxhighlight> Функцію можна застосовувати до всіх видів колекцій, включаючи Map. Детальніше [https://kotlinlang.org/docs/collection-transformations.html тут]. ===Сортування колекцій=== Для сортування колекцій як то списки існують функції, що починаються зі слова sort: <syntaxhighlight lang="kotlin" line start="1"> val numberList=listOf(1,4,3,4,2) val sortedList=numberList.sorted() //1 2 3 4 4 val sortedList2=numberList.sortedDescending() //4 4 3 2 1 </syntaxhighlight> Об'єкти можна посортувати за значенням поля: <syntaxhighlight lang="kotlin" line start="1"> data class Car(val name:String, val price:Int) fun main(){ val carList=listOf( Car("Toyota", 500), Car("BMW", 565), Car("Nissan", 456), Car("Honda", 800) ) val sortedCarList=carList.sortedBy { it.price } //вказуємо поле для сортування println(sortedCarList) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> [Car(name=Nissan, price=456), Car(name=Toyota, price=500), Car(name=BMW, price=565), Car(name=Honda, price=800)] </pre>}} ===Фільтрування колекцій=== Ми можемо відфільтруваати вміст колекції за певною умовою використовуючи функцію filter(): <syntaxhighlight lang="kotlin" line start="1"> data class Car(val name:String, val price:Int) fun main(){ val carList=listOf( Car("Toyota", 500), Car("BMW", 565), Car("Nissan", 456), Car("Honda", 800) ) val newCarList=carList.filter{it.price>500} println(newCarList) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> [Car(name=BMW, price=565), Car(name=Honda, price=800)] </pre>}} Детальніше читайте [https://kotlinlang.org/docs/collection-filtering.html тут] ===Пошук в колекціях=== Можна здійснити пошук в колекціях за допомогою функції find(): <syntaxhighlight lang="kotlin" line start="1"> val newCarList=carList.find{it.price==500} </syntaxhighlight> В результаті видасть перший елемент, що співпав з умовою. Якщо необхідно здійснити пошуку з кінця, то використовуємо функцію findLast() ===forEach=== Можна пройтися по всіх елементах колекції з використанням функції forEach: <syntaxhighlight lang="kotlin" line start="1"> carList.forEach{println(it)} </syntaxhighlight> ===Поєднання функцій=== Роботу із вмістом колекцій можна проводити поєднуючи функції ланцюжком, використовуючи оператор <code>.</code>(точку): <syntaxhighlight lang="kotlin" line start="1"> val newList=carList.filter { it.price>500 }.sortedBy{it.price} </syntaxhighlight> ==Колекції Kotlin та Java Collection Framework== В середині реалізації Kotlin колекцій лежать відповідні реалізації Java. Так по замовчуванню для List використовується реалізація ArrayList, проте можна використати LinkedList при потребі: <syntaxhighlight lang="kotlin" line start="1"> import java.util.LinkedList Для Set по замовчуванню використовується LinkedHashSet, проте можна використати HashSet та TreeSet. Для Map по замовчуванню використовується LinkedHashMap, проте можна використати HashMap та TreeMap. Детальніше про Java колекції можна почитатаи в [[Освоюємо Java/Колекції|Колекції Java]] [[Освоюємо Kotlin/Об'єктно-орієнтоване програмування|об'єктно-орієнтоване програмування]] </syntaxhighlight> [[Категорія:Освоюємо Kotlin]] {{Nav}} 5ejr60b9q0putddf937hqt5nf3tdfsd 41421 41420 2026-08-19T14:56:48Z Володимир Груша 985 /* Колекції Kotlin та Java Collection Framework */ 41421 wikitext text/x-wiki {{Nav|Освоюємо Kotlin|Колекції|programming|nocat=1}} '''Колекції''' - це набір класів для роботи з даними. Колекції в Kotlin представлені типами List, Set, Map, MutableMap, MutableList, MutableMap та ArrayDeque. Приставка Mutable означає, що колекцію можна змінювати. Прості List, Set та Map - не змінюються. Вміст ArrayDeque також можна змінювати. Робота з колекціями схожа на роботу з масивами. ==List== List - це список елементів одного типу, які можуть повторюватись. <syntaxhighlight lang="kotlin" line start="1"> val numbers = listOf("one", "two", "three", "four") //список String val numbers2 = listOf<String>("one", "two", "three", "four") // можна явно вказати тип елементів списку println("Number of elements: ${numbers.size}") println("Third element: ${numbers.get(2)}") // можна так звертатись до елементу списку println("Fourth element: ${numbers[3]}") //а можна як до масив println("Index of element \"two\" ${numbers.indexOf("two")}") </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Number of elements: 4 Third element: three Fourth element: four Index of element "two" 1 </pre>}} В mutable колекціях ми можемо видаляти елементи, замінювати їх та додавати нові: <syntaxhighlight lang="kotlin" line start="1"> val numbers2 = mutableListOf<String>("one", "two", "three", "four") numbers2.removeAt(1) // видаляємо перший(насправді другий) елемент списку numbers2[0] ="first" //заміняєм нульовий елемент numbers2.set(2, "third") // заміняєм другий елемент списку numbers2.add("fives") // додаємо новий елемент println(numbers2) // [first, three, third, five] </syntaxhighlight> Якщо необхідно на базі List створити новий MutableList, то можна скористатись відповідною функціїю toMutableList(): <syntaxhighlight lang="kotlin" line start="1" highlight=2> val list: List<Int> = listOf(5, 4, 3, 56) val mutableList=list.toMutableList() mutableList.add(90) println(mutableList) // [5, 4, 3, 56, 90] mutableList.remove(4)// можна видалити елемент println(mutableList) // [5, 3, 56, 90] </syntaxhighlight> ==Set== Set - це множина елементів, які не повторюються. Порядок елементів не визначений. null також може бути елементом множини, але лише один раз. Дві колекції Set рівні, якщо вони однакових розмірів і у них ідентичні елементи. <syntaxhighlight lang="kotlin" line start="1"> val numbers = setOf(1, 2, 3, 4) println("Кількість елементів: ${numbers.size}") if (numbers.contains(1)) println("1 є у множині") val numbersBackwards = setOf(4, 3, 2, 1) println("Множини рівні: ${numbers == numbersBackwards}") </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Кількість елементів: 4 1 є у множині Множини рівні: true </pre>}} MutableSet підтриує операції з класу MutableCollection. Реалізація MutableSet за замовчуванням зберігає порядок елементів. Тож функції, що покладаються на порядок елементів як то first() чи last(), повертають передбачуваний результат (перше або останнє значення). {{XNote|При використанні, в якості елементів Set, класів даних (data class), вміст об'єктів буде порівнюватись автоматично і, якщо будуть об'єкти з однаковими властивостями, то включатись в Set буде лише один з цих об'єктів.}} ==Map== Map та MutableMap хоч не є нащадками інтерфейсу Collection, відноситься також до колекцій. Map зберігає значення у вигляді пари ключ-значення. Два об'єкта Map рівні, якщо в них однакові пари, незалежно від їхнього місця в середині Map. <syntaxhighlight lang="kotlin" line start="1"> val numbersMap = mutableMapOf("one" to 1, "two" to 2) numbersMap.put("three", 3) // можна так numbersMap["one"] = 11 // а можна так з квадратними дужками println(numbersMap) // {one=11, two=2, three=3} println("Всі ключі: ${numbersMap.keys}") println("Всі значення: ${numbersMap.values}") if ("one" in numbersMap) println("значення ключа \"one\": ${numbersMap["one"]}") if (11 in numbersMap.values) println("Значення 11 є у map") if (numbersMap.containsValue(11)) println("Значення 11 є у map") // те ж саме </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> {one=11, two=2, three=3} Всі ключі: [one, two, three] Всі значення: [11, 2, 3] значення ключа "one": 11 Значення 11 є у map Значення 11 є у map </pre>}} В колекціях і, зокрема, в Map не обов'язково можуть бути базові типи. Колекція може містити і інші об'єкти створені програмістом. Наприклад, створимо клас машина (Car), який міститиме марку машини, її колір та ціну. Map міститиме певний порядковий номер машини зіставлений з об'єктом Car. <syntaxhighlight lang="kotlin" line start="1"> class Car (val name:String, val color:String, val price:Double){ /** * повертаємо інформацію про назву, колір і ціну машини */ fun getInformation():String = "$name $color $price" } fun main(){ var car1= Car("Honda", "blue", 11000.0) var car2= Car("BMW", "red", 12345.0) var car3= Car("Mersedes", "white", 11550.0) val carMap = mapOf(1 to car1, 2 to car2, 3 to car3) println("Перша машина: "+carMap[1]?.getInformation()) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Перша машина: Honda blue 11000.0 </pre>}} Якщо потрібно пройтись почергово по елементах Map, то можна використати цикл або forEach: <syntaxhighlight lang="kotlin" line start="1"> fun main(){ var propertiesMap=mutableMapOf<String, Boolean>() propertiesMap["Big"]=true propertiesMap["Printable"]=false propertiesMap["Readable"]=true println("Перший спосіб:") for (prop in propertiesMap.entries.iterator()){ println("Key: ${prop.key}, Value: ${prop.value}") } println("Другий спосіб:") propertiesMap.forEach{prop-> println("Key: ${prop.key}, Value: ${prop.value}") } } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Перший спосіб: Key: Big, Value: true Key: Printable, Value: false Key: Readable, Value: true Другий спосіб: Key: Big, Value: true Key: Printable, Value: false Key: Readable, Value: true </pre>}} Можна перевірити чи є певний ключ і, якщо нема, то видати певне значення по замовчуванню: <syntaxhighlight lang="kotlin" line start="1"> val mymap=mutableMapOf( "one" to 1, "two" to 2, "three" to 3) val four=mymap.getOrDefault("four", "unknown number") println (four) </syntaxhighlight> В даному випадку буде виведено на екран unknown number. Можна також, якщо неіснує певний ключ, то записати новий ключ разом і з новим значенням: <syntaxhighlight lang="kotlin" line start="1"> val five =mymap.getOrPut("five"){5} </syntaxhighlight> В даному випадку перевіряється чи є ключ five у колекції, якщо немає то записується разом із значенням 5. ==ArrayDeque== ArrayDeque - це реалізація двохсторонньої черги. Тобто в дану колекцію дані можна додавати як на перед черги так і в кінець. <syntaxhighlight lang="kotlin" line start="1"> val deque = ArrayDeque(listOf(1, 2, 3, 4, 5)) deque.addFirst(0) deque.addLast(6) println(deque) // [0, 1, 2, 3, 4, 5, 6] println(deque.first()) // 0 println(deque.last()) // 6 deque.removeFirst() deque.removeLast() println(deque) // [1, 2, 3, 4, 5] </syntaxhighlight> ==Функції для роботи з колекціями== Стандартна бібліотека Kotlin надає ряд функцій, спеціально створених для роботи з колекціями. Розглянемо деякі з них. ===Функція map=== Функція map() дозволяє трансформувати оригінальну колекцію у нову. При цьому ця лямбда функція проходить по елементах колекції і для кожного елемента повертає результат цієї лямбда функції. В результаті створюється новий список з отриманих значень: Як приклад розглянемо збільшення кожного елементу списку на 5 та на 10. <syntaxhighlight lang="kotlin" line start="1"> fun main(){ val numberList=listOf(1,2,3,4,5) //перший спосіб (збільшуєм у 5 раз) val numberList1=numberList.map{it*5} println(numberList1) // [5, 10, 15, 20, 25] //другий спосіб (збільшуєм у 10 раз) val numberList2=numberList.map{number->//замість it використовуємо назву val myNum=number*10 myNum // останній рядок є присвоюваним значенням } println(numberList2) // [10, 20, 30, 40, 50] } </syntaxhighlight> Функцію можна застосовувати до всіх видів колекцій, включаючи Map. Детальніше [https://kotlinlang.org/docs/collection-transformations.html тут]. ===Сортування колекцій=== Для сортування колекцій як то списки існують функції, що починаються зі слова sort: <syntaxhighlight lang="kotlin" line start="1"> val numberList=listOf(1,4,3,4,2) val sortedList=numberList.sorted() //1 2 3 4 4 val sortedList2=numberList.sortedDescending() //4 4 3 2 1 </syntaxhighlight> Об'єкти можна посортувати за значенням поля: <syntaxhighlight lang="kotlin" line start="1"> data class Car(val name:String, val price:Int) fun main(){ val carList=listOf( Car("Toyota", 500), Car("BMW", 565), Car("Nissan", 456), Car("Honda", 800) ) val sortedCarList=carList.sortedBy { it.price } //вказуємо поле для сортування println(sortedCarList) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> [Car(name=Nissan, price=456), Car(name=Toyota, price=500), Car(name=BMW, price=565), Car(name=Honda, price=800)] </pre>}} ===Фільтрування колекцій=== Ми можемо відфільтруваати вміст колекції за певною умовою використовуючи функцію filter(): <syntaxhighlight lang="kotlin" line start="1"> data class Car(val name:String, val price:Int) fun main(){ val carList=listOf( Car("Toyota", 500), Car("BMW", 565), Car("Nissan", 456), Car("Honda", 800) ) val newCarList=carList.filter{it.price>500} println(newCarList) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> [Car(name=BMW, price=565), Car(name=Honda, price=800)] </pre>}} Детальніше читайте [https://kotlinlang.org/docs/collection-filtering.html тут] ===Пошук в колекціях=== Можна здійснити пошук в колекціях за допомогою функції find(): <syntaxhighlight lang="kotlin" line start="1"> val newCarList=carList.find{it.price==500} </syntaxhighlight> В результаті видасть перший елемент, що співпав з умовою. Якщо необхідно здійснити пошуку з кінця, то використовуємо функцію findLast() ===forEach=== Можна пройтися по всіх елементах колекції з використанням функції forEach: <syntaxhighlight lang="kotlin" line start="1"> carList.forEach{println(it)} </syntaxhighlight> ===Поєднання функцій=== Роботу із вмістом колекцій можна проводити поєднуючи функції ланцюжком, використовуючи оператор <code>.</code>(точку): <syntaxhighlight lang="kotlin" line start="1"> val newList=carList.filter { it.price>500 }.sortedBy{it.price} </syntaxhighlight> ==Колекції Kotlin та Java Collection Framework== В середині реалізації Kotlin колекцій лежать відповідні реалізації Java. Так по замовчуванню для List використовується реалізація ArrayList, проте можна використати LinkedList при потребі: <syntaxhighlight lang="kotlin" line start="1"> import java.util.LinkedList </syntaxhighlight> Для Set по замовчуванню використовується LinkedHashSet, проте можна використати HashSet та TreeSet. Для Map по замовчуванню використовується LinkedHashMap, проте можна використати HashMap та TreeMap. Детальніше про Java колекції можна почитатаи в [[Освоюємо Java/Колекції]] {{Nav}} [[Категорія:Освоюємо Kotlin]] gy7qridrl3o0w6h0f380wcxiaitmxrn 41422 41421 2026-08-19T14:59:13Z Володимир Груша 985 /* Колекції Kotlin та Java Collection Framework */ 41422 wikitext text/x-wiki {{Nav|Освоюємо Kotlin|Колекції|programming|nocat=1}} '''Колекції''' - це набір класів для роботи з даними. Колекції в Kotlin представлені типами List, Set, Map, MutableMap, MutableList, MutableMap та ArrayDeque. Приставка Mutable означає, що колекцію можна змінювати. Прості List, Set та Map - не змінюються. Вміст ArrayDeque також можна змінювати. Робота з колекціями схожа на роботу з масивами. ==List== List - це список елементів одного типу, які можуть повторюватись. <syntaxhighlight lang="kotlin" line start="1"> val numbers = listOf("one", "two", "three", "four") //список String val numbers2 = listOf<String>("one", "two", "three", "four") // можна явно вказати тип елементів списку println("Number of elements: ${numbers.size}") println("Third element: ${numbers.get(2)}") // можна так звертатись до елементу списку println("Fourth element: ${numbers[3]}") //а можна як до масив println("Index of element \"two\" ${numbers.indexOf("two")}") </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Number of elements: 4 Third element: three Fourth element: four Index of element "two" 1 </pre>}} В mutable колекціях ми можемо видаляти елементи, замінювати їх та додавати нові: <syntaxhighlight lang="kotlin" line start="1"> val numbers2 = mutableListOf<String>("one", "two", "three", "four") numbers2.removeAt(1) // видаляємо перший(насправді другий) елемент списку numbers2[0] ="first" //заміняєм нульовий елемент numbers2.set(2, "third") // заміняєм другий елемент списку numbers2.add("fives") // додаємо новий елемент println(numbers2) // [first, three, third, five] </syntaxhighlight> Якщо необхідно на базі List створити новий MutableList, то можна скористатись відповідною функціїю toMutableList(): <syntaxhighlight lang="kotlin" line start="1" highlight=2> val list: List<Int> = listOf(5, 4, 3, 56) val mutableList=list.toMutableList() mutableList.add(90) println(mutableList) // [5, 4, 3, 56, 90] mutableList.remove(4)// можна видалити елемент println(mutableList) // [5, 3, 56, 90] </syntaxhighlight> ==Set== Set - це множина елементів, які не повторюються. Порядок елементів не визначений. null також може бути елементом множини, але лише один раз. Дві колекції Set рівні, якщо вони однакових розмірів і у них ідентичні елементи. <syntaxhighlight lang="kotlin" line start="1"> val numbers = setOf(1, 2, 3, 4) println("Кількість елементів: ${numbers.size}") if (numbers.contains(1)) println("1 є у множині") val numbersBackwards = setOf(4, 3, 2, 1) println("Множини рівні: ${numbers == numbersBackwards}") </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Кількість елементів: 4 1 є у множині Множини рівні: true </pre>}} MutableSet підтриує операції з класу MutableCollection. Реалізація MutableSet за замовчуванням зберігає порядок елементів. Тож функції, що покладаються на порядок елементів як то first() чи last(), повертають передбачуваний результат (перше або останнє значення). {{XNote|При використанні, в якості елементів Set, класів даних (data class), вміст об'єктів буде порівнюватись автоматично і, якщо будуть об'єкти з однаковими властивостями, то включатись в Set буде лише один з цих об'єктів.}} ==Map== Map та MutableMap хоч не є нащадками інтерфейсу Collection, відноситься також до колекцій. Map зберігає значення у вигляді пари ключ-значення. Два об'єкта Map рівні, якщо в них однакові пари, незалежно від їхнього місця в середині Map. <syntaxhighlight lang="kotlin" line start="1"> val numbersMap = mutableMapOf("one" to 1, "two" to 2) numbersMap.put("three", 3) // можна так numbersMap["one"] = 11 // а можна так з квадратними дужками println(numbersMap) // {one=11, two=2, three=3} println("Всі ключі: ${numbersMap.keys}") println("Всі значення: ${numbersMap.values}") if ("one" in numbersMap) println("значення ключа \"one\": ${numbersMap["one"]}") if (11 in numbersMap.values) println("Значення 11 є у map") if (numbersMap.containsValue(11)) println("Значення 11 є у map") // те ж саме </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> {one=11, two=2, three=3} Всі ключі: [one, two, three] Всі значення: [11, 2, 3] значення ключа "one": 11 Значення 11 є у map Значення 11 є у map </pre>}} В колекціях і, зокрема, в Map не обов'язково можуть бути базові типи. Колекція може містити і інші об'єкти створені програмістом. Наприклад, створимо клас машина (Car), який міститиме марку машини, її колір та ціну. Map міститиме певний порядковий номер машини зіставлений з об'єктом Car. <syntaxhighlight lang="kotlin" line start="1"> class Car (val name:String, val color:String, val price:Double){ /** * повертаємо інформацію про назву, колір і ціну машини */ fun getInformation():String = "$name $color $price" } fun main(){ var car1= Car("Honda", "blue", 11000.0) var car2= Car("BMW", "red", 12345.0) var car3= Car("Mersedes", "white", 11550.0) val carMap = mapOf(1 to car1, 2 to car2, 3 to car3) println("Перша машина: "+carMap[1]?.getInformation()) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Перша машина: Honda blue 11000.0 </pre>}} Якщо потрібно пройтись почергово по елементах Map, то можна використати цикл або forEach: <syntaxhighlight lang="kotlin" line start="1"> fun main(){ var propertiesMap=mutableMapOf<String, Boolean>() propertiesMap["Big"]=true propertiesMap["Printable"]=false propertiesMap["Readable"]=true println("Перший спосіб:") for (prop in propertiesMap.entries.iterator()){ println("Key: ${prop.key}, Value: ${prop.value}") } println("Другий спосіб:") propertiesMap.forEach{prop-> println("Key: ${prop.key}, Value: ${prop.value}") } } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Перший спосіб: Key: Big, Value: true Key: Printable, Value: false Key: Readable, Value: true Другий спосіб: Key: Big, Value: true Key: Printable, Value: false Key: Readable, Value: true </pre>}} Можна перевірити чи є певний ключ і, якщо нема, то видати певне значення по замовчуванню: <syntaxhighlight lang="kotlin" line start="1"> val mymap=mutableMapOf( "one" to 1, "two" to 2, "three" to 3) val four=mymap.getOrDefault("four", "unknown number") println (four) </syntaxhighlight> В даному випадку буде виведено на екран unknown number. Можна також, якщо неіснує певний ключ, то записати новий ключ разом і з новим значенням: <syntaxhighlight lang="kotlin" line start="1"> val five =mymap.getOrPut("five"){5} </syntaxhighlight> В даному випадку перевіряється чи є ключ five у колекції, якщо немає то записується разом із значенням 5. ==ArrayDeque== ArrayDeque - це реалізація двохсторонньої черги. Тобто в дану колекцію дані можна додавати як на перед черги так і в кінець. <syntaxhighlight lang="kotlin" line start="1"> val deque = ArrayDeque(listOf(1, 2, 3, 4, 5)) deque.addFirst(0) deque.addLast(6) println(deque) // [0, 1, 2, 3, 4, 5, 6] println(deque.first()) // 0 println(deque.last()) // 6 deque.removeFirst() deque.removeLast() println(deque) // [1, 2, 3, 4, 5] </syntaxhighlight> ==Функції для роботи з колекціями== Стандартна бібліотека Kotlin надає ряд функцій, спеціально створених для роботи з колекціями. Розглянемо деякі з них. ===Функція map=== Функція map() дозволяє трансформувати оригінальну колекцію у нову. При цьому ця лямбда функція проходить по елементах колекції і для кожного елемента повертає результат цієї лямбда функції. В результаті створюється новий список з отриманих значень: Як приклад розглянемо збільшення кожного елементу списку на 5 та на 10. <syntaxhighlight lang="kotlin" line start="1"> fun main(){ val numberList=listOf(1,2,3,4,5) //перший спосіб (збільшуєм у 5 раз) val numberList1=numberList.map{it*5} println(numberList1) // [5, 10, 15, 20, 25] //другий спосіб (збільшуєм у 10 раз) val numberList2=numberList.map{number->//замість it використовуємо назву val myNum=number*10 myNum // останній рядок є присвоюваним значенням } println(numberList2) // [10, 20, 30, 40, 50] } </syntaxhighlight> Функцію можна застосовувати до всіх видів колекцій, включаючи Map. Детальніше [https://kotlinlang.org/docs/collection-transformations.html тут]. ===Сортування колекцій=== Для сортування колекцій як то списки існують функції, що починаються зі слова sort: <syntaxhighlight lang="kotlin" line start="1"> val numberList=listOf(1,4,3,4,2) val sortedList=numberList.sorted() //1 2 3 4 4 val sortedList2=numberList.sortedDescending() //4 4 3 2 1 </syntaxhighlight> Об'єкти можна посортувати за значенням поля: <syntaxhighlight lang="kotlin" line start="1"> data class Car(val name:String, val price:Int) fun main(){ val carList=listOf( Car("Toyota", 500), Car("BMW", 565), Car("Nissan", 456), Car("Honda", 800) ) val sortedCarList=carList.sortedBy { it.price } //вказуємо поле для сортування println(sortedCarList) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> [Car(name=Nissan, price=456), Car(name=Toyota, price=500), Car(name=BMW, price=565), Car(name=Honda, price=800)] </pre>}} ===Фільтрування колекцій=== Ми можемо відфільтруваати вміст колекції за певною умовою використовуючи функцію filter(): <syntaxhighlight lang="kotlin" line start="1"> data class Car(val name:String, val price:Int) fun main(){ val carList=listOf( Car("Toyota", 500), Car("BMW", 565), Car("Nissan", 456), Car("Honda", 800) ) val newCarList=carList.filter{it.price>500} println(newCarList) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> [Car(name=BMW, price=565), Car(name=Honda, price=800)] </pre>}} Детальніше читайте [https://kotlinlang.org/docs/collection-filtering.html тут] ===Пошук в колекціях=== Можна здійснити пошук в колекціях за допомогою функції find(): <syntaxhighlight lang="kotlin" line start="1"> val newCarList=carList.find{it.price==500} </syntaxhighlight> В результаті видасть перший елемент, що співпав з умовою. Якщо необхідно здійснити пошуку з кінця, то використовуємо функцію findLast() ===forEach=== Можна пройтися по всіх елементах колекції з використанням функції forEach: <syntaxhighlight lang="kotlin" line start="1"> carList.forEach{println(it)} </syntaxhighlight> ===Поєднання функцій=== Роботу із вмістом колекцій можна проводити поєднуючи функції ланцюжком, використовуючи оператор <code>.</code>(точку): <syntaxhighlight lang="kotlin" line start="1"> val newList=carList.filter { it.price>500 }.sortedBy{it.price} </syntaxhighlight> ==Колекції Kotlin та Java Collection Framework== В середині реалізації Kotlin колекцій лежать відповідні реалізації Java. Так по замовчуванню для List використовується реалізація ArrayList, проте можна використати LinkedList при потребі: <syntaxhighlight lang="kotlin" line start="1"> import java.util.LinkedList val list = LinkedList<Int>(listOf(1,2,3,4,6)) </syntaxhighlight> В залежності від вибраної реалізації залежить і порядок зберігання значень списку. Для Set по замовчуванню використовується LinkedHashSet, проте можна використати HashSet та TreeSet. Для Map по замовчуванню використовується LinkedHashMap, проте можна використати HashMap та TreeMap. Детальніше про Java колекції можна почитатаи в [[Освоюємо Java/Колекції]] {{Nav}} [[Категорія:Освоюємо Kotlin]] o4dxcg2ue45ifqbdu0g937zajv4uezk 41423 41422 2026-08-19T15:02:59Z Володимир Груша 985 /* Колекції Kotlin та Java Collection Framework */ 41423 wikitext text/x-wiki {{Nav|Освоюємо Kotlin|Колекції|programming|nocat=1}} '''Колекції''' - це набір класів для роботи з даними. Колекції в Kotlin представлені типами List, Set, Map, MutableMap, MutableList, MutableMap та ArrayDeque. Приставка Mutable означає, що колекцію можна змінювати. Прості List, Set та Map - не змінюються. Вміст ArrayDeque також можна змінювати. Робота з колекціями схожа на роботу з масивами. ==List== List - це список елементів одного типу, які можуть повторюватись. <syntaxhighlight lang="kotlin" line start="1"> val numbers = listOf("one", "two", "three", "four") //список String val numbers2 = listOf<String>("one", "two", "three", "four") // можна явно вказати тип елементів списку println("Number of elements: ${numbers.size}") println("Third element: ${numbers.get(2)}") // можна так звертатись до елементу списку println("Fourth element: ${numbers[3]}") //а можна як до масив println("Index of element \"two\" ${numbers.indexOf("two")}") </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Number of elements: 4 Third element: three Fourth element: four Index of element "two" 1 </pre>}} В mutable колекціях ми можемо видаляти елементи, замінювати їх та додавати нові: <syntaxhighlight lang="kotlin" line start="1"> val numbers2 = mutableListOf<String>("one", "two", "three", "four") numbers2.removeAt(1) // видаляємо перший(насправді другий) елемент списку numbers2[0] ="first" //заміняєм нульовий елемент numbers2.set(2, "third") // заміняєм другий елемент списку numbers2.add("fives") // додаємо новий елемент println(numbers2) // [first, three, third, five] </syntaxhighlight> Якщо необхідно на базі List створити новий MutableList, то можна скористатись відповідною функціїю toMutableList(): <syntaxhighlight lang="kotlin" line start="1" highlight=2> val list: List<Int> = listOf(5, 4, 3, 56) val mutableList=list.toMutableList() mutableList.add(90) println(mutableList) // [5, 4, 3, 56, 90] mutableList.remove(4)// можна видалити елемент println(mutableList) // [5, 3, 56, 90] </syntaxhighlight> ==Set== Set - це множина елементів, які не повторюються. Порядок елементів не визначений. null також може бути елементом множини, але лише один раз. Дві колекції Set рівні, якщо вони однакових розмірів і у них ідентичні елементи. <syntaxhighlight lang="kotlin" line start="1"> val numbers = setOf(1, 2, 3, 4) println("Кількість елементів: ${numbers.size}") if (numbers.contains(1)) println("1 є у множині") val numbersBackwards = setOf(4, 3, 2, 1) println("Множини рівні: ${numbers == numbersBackwards}") </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Кількість елементів: 4 1 є у множині Множини рівні: true </pre>}} MutableSet підтриує операції з класу MutableCollection. Реалізація MutableSet за замовчуванням зберігає порядок елементів. Тож функції, що покладаються на порядок елементів як то first() чи last(), повертають передбачуваний результат (перше або останнє значення). {{XNote|При використанні, в якості елементів Set, класів даних (data class), вміст об'єктів буде порівнюватись автоматично і, якщо будуть об'єкти з однаковими властивостями, то включатись в Set буде лише один з цих об'єктів.}} ==Map== Map та MutableMap хоч не є нащадками інтерфейсу Collection, відноситься також до колекцій. Map зберігає значення у вигляді пари ключ-значення. Два об'єкта Map рівні, якщо в них однакові пари, незалежно від їхнього місця в середині Map. <syntaxhighlight lang="kotlin" line start="1"> val numbersMap = mutableMapOf("one" to 1, "two" to 2) numbersMap.put("three", 3) // можна так numbersMap["one"] = 11 // а можна так з квадратними дужками println(numbersMap) // {one=11, two=2, three=3} println("Всі ключі: ${numbersMap.keys}") println("Всі значення: ${numbersMap.values}") if ("one" in numbersMap) println("значення ключа \"one\": ${numbersMap["one"]}") if (11 in numbersMap.values) println("Значення 11 є у map") if (numbersMap.containsValue(11)) println("Значення 11 є у map") // те ж саме </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> {one=11, two=2, three=3} Всі ключі: [one, two, three] Всі значення: [11, 2, 3] значення ключа "one": 11 Значення 11 є у map Значення 11 є у map </pre>}} В колекціях і, зокрема, в Map не обов'язково можуть бути базові типи. Колекція може містити і інші об'єкти створені програмістом. Наприклад, створимо клас машина (Car), який міститиме марку машини, її колір та ціну. Map міститиме певний порядковий номер машини зіставлений з об'єктом Car. <syntaxhighlight lang="kotlin" line start="1"> class Car (val name:String, val color:String, val price:Double){ /** * повертаємо інформацію про назву, колір і ціну машини */ fun getInformation():String = "$name $color $price" } fun main(){ var car1= Car("Honda", "blue", 11000.0) var car2= Car("BMW", "red", 12345.0) var car3= Car("Mersedes", "white", 11550.0) val carMap = mapOf(1 to car1, 2 to car2, 3 to car3) println("Перша машина: "+carMap[1]?.getInformation()) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Перша машина: Honda blue 11000.0 </pre>}} Якщо потрібно пройтись почергово по елементах Map, то можна використати цикл або forEach: <syntaxhighlight lang="kotlin" line start="1"> fun main(){ var propertiesMap=mutableMapOf<String, Boolean>() propertiesMap["Big"]=true propertiesMap["Printable"]=false propertiesMap["Readable"]=true println("Перший спосіб:") for (prop in propertiesMap.entries.iterator()){ println("Key: ${prop.key}, Value: ${prop.value}") } println("Другий спосіб:") propertiesMap.forEach{prop-> println("Key: ${prop.key}, Value: ${prop.value}") } } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> Перший спосіб: Key: Big, Value: true Key: Printable, Value: false Key: Readable, Value: true Другий спосіб: Key: Big, Value: true Key: Printable, Value: false Key: Readable, Value: true </pre>}} Можна перевірити чи є певний ключ і, якщо нема, то видати певне значення по замовчуванню: <syntaxhighlight lang="kotlin" line start="1"> val mymap=mutableMapOf( "one" to 1, "two" to 2, "three" to 3) val four=mymap.getOrDefault("four", "unknown number") println (four) </syntaxhighlight> В даному випадку буде виведено на екран unknown number. Можна також, якщо неіснує певний ключ, то записати новий ключ разом і з новим значенням: <syntaxhighlight lang="kotlin" line start="1"> val five =mymap.getOrPut("five"){5} </syntaxhighlight> В даному випадку перевіряється чи є ключ five у колекції, якщо немає то записується разом із значенням 5. ==ArrayDeque== ArrayDeque - це реалізація двохсторонньої черги. Тобто в дану колекцію дані можна додавати як на перед черги так і в кінець. <syntaxhighlight lang="kotlin" line start="1"> val deque = ArrayDeque(listOf(1, 2, 3, 4, 5)) deque.addFirst(0) deque.addLast(6) println(deque) // [0, 1, 2, 3, 4, 5, 6] println(deque.first()) // 0 println(deque.last()) // 6 deque.removeFirst() deque.removeLast() println(deque) // [1, 2, 3, 4, 5] </syntaxhighlight> ==Функції для роботи з колекціями== Стандартна бібліотека Kotlin надає ряд функцій, спеціально створених для роботи з колекціями. Розглянемо деякі з них. ===Функція map=== Функція map() дозволяє трансформувати оригінальну колекцію у нову. При цьому ця лямбда функція проходить по елементах колекції і для кожного елемента повертає результат цієї лямбда функції. В результаті створюється новий список з отриманих значень: Як приклад розглянемо збільшення кожного елементу списку на 5 та на 10. <syntaxhighlight lang="kotlin" line start="1"> fun main(){ val numberList=listOf(1,2,3,4,5) //перший спосіб (збільшуєм у 5 раз) val numberList1=numberList.map{it*5} println(numberList1) // [5, 10, 15, 20, 25] //другий спосіб (збільшуєм у 10 раз) val numberList2=numberList.map{number->//замість it використовуємо назву val myNum=number*10 myNum // останній рядок є присвоюваним значенням } println(numberList2) // [10, 20, 30, 40, 50] } </syntaxhighlight> Функцію можна застосовувати до всіх видів колекцій, включаючи Map. Детальніше [https://kotlinlang.org/docs/collection-transformations.html тут]. ===Сортування колекцій=== Для сортування колекцій як то списки існують функції, що починаються зі слова sort: <syntaxhighlight lang="kotlin" line start="1"> val numberList=listOf(1,4,3,4,2) val sortedList=numberList.sorted() //1 2 3 4 4 val sortedList2=numberList.sortedDescending() //4 4 3 2 1 </syntaxhighlight> Об'єкти можна посортувати за значенням поля: <syntaxhighlight lang="kotlin" line start="1"> data class Car(val name:String, val price:Int) fun main(){ val carList=listOf( Car("Toyota", 500), Car("BMW", 565), Car("Nissan", 456), Car("Honda", 800) ) val sortedCarList=carList.sortedBy { it.price } //вказуємо поле для сортування println(sortedCarList) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> [Car(name=Nissan, price=456), Car(name=Toyota, price=500), Car(name=BMW, price=565), Car(name=Honda, price=800)] </pre>}} ===Фільтрування колекцій=== Ми можемо відфільтруваати вміст колекції за певною умовою використовуючи функцію filter(): <syntaxhighlight lang="kotlin" line start="1"> data class Car(val name:String, val price:Int) fun main(){ val carList=listOf( Car("Toyota", 500), Car("BMW", 565), Car("Nissan", 456), Car("Honda", 800) ) val newCarList=carList.filter{it.price>500} println(newCarList) } </syntaxhighlight> {{XConsole|1='''Результат:''' <pre> [Car(name=BMW, price=565), Car(name=Honda, price=800)] </pre>}} Детальніше читайте [https://kotlinlang.org/docs/collection-filtering.html тут] ===Пошук в колекціях=== Можна здійснити пошук в колекціях за допомогою функції find(): <syntaxhighlight lang="kotlin" line start="1"> val newCarList=carList.find{it.price==500} </syntaxhighlight> В результаті видасть перший елемент, що співпав з умовою. Якщо необхідно здійснити пошуку з кінця, то використовуємо функцію findLast() ===forEach=== Можна пройтися по всіх елементах колекції з використанням функції forEach: <syntaxhighlight lang="kotlin" line start="1"> carList.forEach{println(it)} </syntaxhighlight> ===Поєднання функцій=== Роботу із вмістом колекцій можна проводити поєднуючи функції ланцюжком, використовуючи оператор <code>.</code>(точку): <syntaxhighlight lang="kotlin" line start="1"> val newList=carList.filter { it.price>500 }.sortedBy{it.price} </syntaxhighlight> ==Колекції Kotlin та Java Collection Framework== В середині реалізації Kotlin колекцій лежать відповідні реалізації Java. Так по замовчуванню для List використовується реалізація ArrayList, проте можна використати LinkedList при потребі: <syntaxhighlight lang="kotlin" line start="1"> import java.util.LinkedList val list = LinkedList<Int>(listOf(1,2,3,4,6)) </syntaxhighlight> В залежності від вибраної реалізації залежить і порядок зберігання значень списку. Для Set по замовчуванню використовується LinkedHashSet, проте можна використати HashSet та TreeSet. Для Map по замовчуванню використовується LinkedHashMap, проте можна використати HashMap та TreeMap. Детальніше про Java колекції можна почитатаи в [[Освоюємо Java/Колекції]] {{Nav}} [[Категорія:Освоюємо Kotlin]] m0l9sc9gch5p0wdzc67mzgslmwv9wpq Рецепт:Мандрики 102 8653 41445 41406 2026-08-20T06:02:14Z Heffalump1974 3591 шаблон 41445 wikitext text/x-wiki [[Файл:Mandrykas.jpg|міні|Мандрики за рецептом від [[w:Євген Клопотенко|Євгена Клопотенка]]]] '''Мандри́ки''' &nbsp;— коржики з відкритою або закритою начинкою, як солодкою, так і не солодкою. {{Вікіпедія|Мандрики}} == Мандрики 1<ref name="ukrstravy1960" /> == ([[Кулінарна книга/Джерела/Українські страви 1960 р.|Українські страви 1960 р.]]) <div class="mw-collapsible"> {{Початок цитати|источник=Українські страви 1960 р., с. 311}} '''Мандрики з вишнями.''' Всипають в каструлю 2 склянки борошна. вливають туди 1 склянку теплого молока і розмішують. Розведені окремо в 1 ст. ложці теплого молока дріжджі розмішують і ставлять в тепле місце. Коли тісто підійде, в нього кладуть 1—2 яйця, сіль і вимішують, додаючи борошно, поки тісто не почне відставати від рук і каструлі Після вимішування тісто ставлять знову в тепле місце, щоб воно підійшло. Вишні очищають, посипають цукром-піском і дають постояти 1 год. Після цього з вишень відціджують сік, прокип’ячують його і поливають ним готові мандрики. Коли тісто підійде, його розкачують на тонкі коржики і кладуть на них вишні так, щоб не було вільного місця, але щоб і вишні не лежали одна на одній, посипають цукром, защипують краї і ставлять в духовку запікатись, накривши зверху папером. Вийнявши з духовки, посипають цукром. Подають на стіл з вишневим соком. До мандриків можна подавати також сметану. На 3 склянки борошна — 1—2 яйця, 2 склянки молока, 15 г дріжджів, 600 г вишень, 200 г цукру. {{Кінець цитати}} </div> <div class="mw-collapsible"> {{Початок цитати|источник=там же, с. 312}} '''Мандрики з капустою.''' Готують дріжджове тісто і, коли воно підійде, роблять коржики, краї яких піднімають і защипують. Капусту дрібно шаткують, тушкують з маслом, цибулею, перцем і сіллю. Коли тісто коржиків підійде, на них кладуть охолоджену капусту, краї їх змащують яйцем, а капусту поливають маслом, в якому смажилась цибуля, і ставлять в гарячу духовку випікатись. На 2,5 г склянки борошна — 20 г дріжджів, 0,5 склянки молока, І—2 яйця, сіль, 700 г свіжої капусти, 100 г цибулі, 50 г масла. {{Кінець цитати}} </div> <div class="mw-collapsible"> {{Початок цитати|источник=там же, с. 332}} '''Мандрики з сиром.''' Приготовляють бездріжджове тісто. Сир добре віджимають або кладуть під гніт, протирають крізь сито, додають сметану, яйця, сіль, цукор, розтоплене масло і розмішують, щоб не було грудочок. Тісто, добре вимісивши, розкачують тонким шаром, вирізують кружки, зверху кладуть підготовлений сир, защипують краї, укладають на змащений жиром і посипаний борошном лист, змащують яйцем і випікають в духовці. На 4 склянки борошна — 200 г сметани, 200 г масла, 3 яйця, 800 г сиру, по 1 ст ложці цукру і вершкового масла, 1 чайну ложку солі. {{Кінець цитати}} </div> <div class="mw-collapsible"> {{Початок цитати|источник=там же с. 333}} '''Мандрики з варенням.''' Борошно просівають на тістову дошку, роблять в ньому заглиблення, в яке кладуть яйця, розтерті варені жовтки, вершкове масло, цукор, сметану, сіль і швидко замішують тісто. Тісто кладуть на тарілку, накривають чистим рушником і виносять в холодне місце на ЗО—40 хв Після цього тісто розкачують тонким шаром (завтовшки 0,5 см), вирізують склянкою або спеціальною вирізкою кружки. На кружки накладають рівним шаром ягоди з варенням, а край кружка загортають зигзагоподібно всередину. Якщо ягоди беруть свіжі, то їх попередньо тушкують, зливають з них сік, що утворився, і додають на смак цукор. Мандрики укладають на змащений лист і ставлять в духовку на 10—15 хв. для випікання. На 3 склянки борошна — 0,5 склянки сметани, 100 г вершкового масла, 2 яйця, 2 варених жовтки, 2 ст. ложки цукру, 0,5 чайної ложки солі. {{Кінець цитати}} </div> <div class="mw-collapsible"> {{Початок цитати|источник=там же, с. 333}} '''Мандрики із сливами.''' Тісто приготовляють так само, як і для мандриків з варенням. Сливи очищають від кісточок, злегка відварюють з цукром, а сироп зціджують. Сливи укладають на коржики щільним шаром в один ряд, посипають цукром, загортають краї всередину, змащують яйцем, укладають на змащений лист і випікають в духовці протягом 15—20 хв. Випечені мандрики посипають цукром і подають на стіл із сметаною або цукровою пудрою, які подають окремо. На 4 склянки борошна - 200 г масла, 200 г цукру, 2 яйця, 2 ст. ложки сметани, 500 г слив, 200 г цукрової пудри. {{Кінець цитати}} </div> <div class="mw-collapsible"> {{Початок цитати|источник=там же, с. 334}} '''Мандрики з полуницями або малиною.''' Тісто приготовляють, як і для мандриків з варенням. Полуниці злегка відварюють з цукром і відціджують сироп. Підготовлені полуниці кладуть на розкачаний коржик рівним шаром, краї коржика загортають зигзагоподібно всередину, посипають зверху цукром, укладають на змащений лист і випікають в духовці На 4 склянки борошна - 200 г цукру, 200 г вершкового масла, 2 яйця, 2 ст. ложки сметани, 200 е цукрової пудри, 800 г полуниць. {{Кінець цитати}} == Галерея == <gallery> Файл:Mandryka's filling.jpg|Мандрики з начинкою із [[Рецепт:Сир|сира]]. Файл:Мандрики2.jpg|Мандрики. Файл:Мандрики з яблучанкою.jpg|Мандрики з [[Рецепт:Ябчанка|ябчанкою]]. </gallery> == Див. також == * [[Рецепт:Сочники|Сочники]] * [[Рецепт:Сирники|Сирники]] * [[Рецепт:Ватрушки|Ватрушки]] * [[Рецепт:Сластьони|Сластьони]] * [[Рецепт:Книші|Книші]] == Примітки== {{reflist|30em|refs= <ref name=ukrstravy1960>{{Cite book |title=Українські страви |last1=Денисенко |first1=Л.П. |last2= |first2 = |publisher=Державне видавництво технічної літератури України |location=Київ |chapter=Мандрики з вишнями, Мандрики з капустою, Мандрики з сиром, Мандрики з варенням, Мандрики із сливами, Мандрики з полуницями або малиною. |isbn=}}</ref> }} {{Українська кухня}} [[Категорія:Рецепти]] [[Категорія:Українська кухня]] jwm566uidfk4yhza5zo7hf9n25qs2he Шаблон:Українська кухня 10 8654 41424 2026-08-20T05:54:49Z Heffalump1974 3591 Створена сторінка: <div class="toccolours" style="width: 100%; clear: both; margin-top: 1em; font-size: 90%; box-sizing: border-box; line-height: 1.6;"> <div style="background:#b0e0e6; text-align: center; font-weight: bold; padding: 6px; font-size: 105%;"> [[Файл:Flag of Ukraine.svg|22px]] [[Рецепт:Українська кухня|Українська кухня]] </div> <table style="width: 100%; border-collapse: collapse; margin: 5px 0;"> <tr style="border-bottom:... 41424 wikitext text/x-wiki <div class="toccolours" style="width: 100%; clear: both; margin-top: 1em; font-size: 90%; box-sizing: border-box; line-height: 1.6;"> <div style="background:#b0e0e6; text-align: center; font-weight: bold; padding: 6px; font-size: 105%;"> [[Файл:Flag of Ukraine.svg|22px]] [[Рецепт:Українська кухня|Українська кухня]] </div> <table style="width: 100%; border-collapse: collapse; margin: 5px 0;"> <tr style="border-bottom: 1px solid #ccc;"> <td style="width: 15%; font-weight: bold; padding: 6px; background: #f5f5f5; vertical-align: top;">Перші страви</td> <td style="padding: 6px; vertical-align: top;"> '''Рідкі:''' [[Рецепт:Борщ|Борщ]] ([[Рецепт:Червоний борщ|червоний]] · [[Рецепт:Зелений борщ|зелений]] · [[Рецепт:Холодний борщ|холодний]]) · [[Рецепт:Бурячинка|Бурячинка]] · [[Рецепт:Годзя|Годзя]] · [[Рецепт:Гречаний суп|Гречаний суп]] · [[Рецепт:Затирка|Затирка]] · [[Рецепт:Капусняк|Капусняк]] · [[Рецепт:Крупник|Крупник]] · [[Рецепт:Куліш|Куліш]] · [[Рецепт:Лемішка|Лемішка]] · [[Рецепт:Огірочник|Огірочник]] · [[Рецепт:Просілне|Просілне]]<sup>†</sup> · [[Рецепт:Саламаха|Саламаха]] · [[Рецепт:Солянка|Солянка]] · [[Рецепт:Холодник|Холодник]] · [[Рецепт:Чир|Чир]] · [[Рецепт:Щерба|Щерба]] · [[Рецепт:Юшка|Юшка]] </td> </tr> <tr style="border-bottom: 1px solid #ccc;"> <td style="font-weight: bold; padding: 6px; background: #f5f5f5; vertical-align: top;">Другі страви</td> <td style="padding: 6px; vertical-align: top;"> '''М'ясні та рибні:''' [[Рецепт:Верещака|Верещака]] · [[Рецепт:Гурка|Гурка]] · [[Рецепт:Душенина|Душенина]] · [[Рецепт:Завиванець|Завиванець]] · [[Рецепт:Кендюх|Кендюх]] · [[Рецепт:Котлета по-київськи|Котлета по-київськи]] · [[Рецепт:Кров'янка|Кров'янка]] · [[Рецепт:Крученики|Крученики]] · [[Рецепт:Мазурики|Мазурики]] · [[Рецепт:Мацик|Мацик]] · [[Рецепт:Полядвиця|Полядвиця]] · [[Рецепт:Смаженина|Смаженина]] · [[Рецепт:Січеники|Січеники]] · [[Рецепт:Чепець з гречкою|Чепець з гречкою]] · [[Рецепт:Фляки|Фляки]] · [[Рецепт:Холодець|Холодець]] · [[Рецепт:Шпундра|Шпундра]] · [[Рецепт:Язик|Язик]]<br /> '''Борошняні та овочеві:''' [[Рецепт:Вареники|Вареники]] · [[Рецепт:Галушки|Галушки]] · [[Рецепт:Голубці|Голубці]] · [[Рецепт:Гречаники|Гречаники]] · [[Рецепт:Деруни|Деруни]] · [[Рецепт:Картопляники|Картопляники]] · [[Рецепт:Кльоцки|Кльоцки]] · [[Рецепт:Палюшки|Палюшки]] </td> </tr> <tr style="border-bottom: 1px solid #ccc;"> <td style="font-weight: bold; padding: 6px; background: #f5f5f5; vertical-align: top;">Каші</td> <td style="padding: 6px; vertical-align: top;"> [[Рецепт:Бануш|Бануш (Банош)]] · [[Рецепт:Гречана каша|Гречана]] · [[Рецепт:Гарбузова каша|Гарбузова]] · [[Рецепт:Качана каша|Качана]] · [[Рецепт:Лемішка|Лемішка]] ([[Рецепт:Гуркало|гуркало]] · [[Рецепт:Гойданка|гойданка]]) · [[Рецепт:Мамалиґа|Мамалиґа]] · [[Рецепт:Тетеря|Тетеря]]<sup>†</sup> </td> </tr> <tr style="border-bottom: 1px solid #ccc;"> <td style="font-weight: bold; padding: 6px; background: #f5f5f5; vertical-align: top;">Гарніри та закуски</td> <td style="padding: 6px; vertical-align: top;"> [[Рецепт:Кав'яр|Кав'яр]] · [[Рецепт:Kвашена капуста|Квашена капуста]] · [[Рецепт:Книш|Книш і книшики]] · [[Рецепт:Корж|Корж]] · [[Рецепт:Малай|Малай]] · [[Рецепт:Пампушки|Пампушки]] · [[Рецепт:Пизи|Пизи]] · [[Рецепт:Потапці|Потапці]] · [[Рецепт:Пряженя|Пряженя]] · [[Рецепт:Сало|Сало]] · [[Рецепт:Смалець|Смалець]] · [[Рецепт:Шкварки|Шкварки]] </td> </tr> <tr style="border-bottom: 1px solid #ccc;"> <td style="font-weight: bold; padding: 6px; background: #f5f5f5; vertical-align: top;">Молочні страви</td> <td style="padding: 6px; vertical-align: top;"> [[Рецепт:Бринза|Бринза]] · [[Рецепт:Будз|Будз]] · [[Рецепт:Гуслянка|Гуслянка]] · [[Рецепт:Сир|Сир (творог)]] · [[Рецепт:Маслянка|Маслянка]] · [[Рецепт:Мачанка|Мачанка]] · [[Рецепт:Молозиво|Молозиво]] · [[Рецепт:Топлене молоко|Топлене молоко]] · [[Рецепт:Ряжанка|Ряжанка]] · [[Рецепт:Кисляк|Кисляк]] </td> </tr> <tr style="border-bottom: 1px solid #ccc;"> <td style="font-weight: bold; padding: 6px; background: #f5f5f5; vertical-align: top;">Десерти та солодощі</td> <td style="padding: 6px; vertical-align: top;"> [[Рецепт:Бублики|Бублики]] · [[Рецепт:Ватрушки|Ватрушки]] · [[Рецепт:Вергуни|Вергуни]] · [[Рецепт:Вершківка|Вершківка]] · [[Рецепт:Гамула|Гамула]]<sup>†</sup> · [[Рецепт:Зубці|Зубці]]<sup>†</sup> · [[Рецепт:Кваша|Кваша]]<sup>†</sup> · [[Рецепт:Кисіль|Кисіль]] · [[Рецепт:Легуміна|Легуміна]] · [[Рецепт:Мандрики|Мандрики]] · [[Рецепт:Медовик|Медовик]] · [[Рецепт:Млинці|Млинці]] ([[Рецепт:Налисники|Налисники]] · [[Рецепт:Оладки|Оладки]] · [[Рецепт:Присканці|Присканці]]) · [[Рецепт:Облизні|Облизні]] · [[Рецепт:Папушник|Папушник]] · [[Рецепт:Пиріжки|Пиріжки]] · [[Рецепт:Пиріг|Пиріг]] · [[Рецепт:Пінник|Пінник]] · [[Рецепт:Плетенник|Плетенник]] · [[Рецепт:Пляцки|Пляцки]] · [[Рецепт:Пряники|Пряники]] ([[Рецепт:Медяники|Медяники]] · [[Рецепт:Панянки|Панянки]] · [[Рецепт:Миколайчики|Миколайчики]]) · [[Рецепт:Путря|Путря]]<sup>†</sup> · [[Рецепт:Пухкеники|Пухкеники]] · [[Рецепт:Сирники|Сирники]] · [[Рецепт:Сластьони|Сластьони]] · [[Рецепт:Сметаники|Сметаники]] · [[Рецепт:Соложеник|Соложеник]] · [[Рецепт:Стовпці|Стовпці]] · [[Рецепт:Стуленики|Стуленики]] · [[Рецепт:Черешнянка|Черешнянка]] · [[Рецепт:Ябчанка|Ябчанка]] </td> </tr> <tr style="border-bottom: 1px solid #ccc;"> <td style="font-weight: bold; padding: 6px; background: #f5f5f5; vertical-align: top;">Напої</td> <td style="padding: 6px; vertical-align: top;"> '''Алкогольні:''' [[Рецепт:Варенуха|Варенуха]] · [[Рецепт:Горілка|Горілка]] · [[Рецепт:Запіканка (напій)|Запіканка]] · [[Рецепт:Малинівка|Малинівка]] · [[Рецепт:Медовуха|Медовуха]] · [[Рецепт:Спотикач|Спотикач]] · [[Рецепт:Цитринівка|Цитринівка]] · [[Рецепт:Контабас|Контабас]]<br /> '''Без­алкогольні:''' [[Рецепт:Квас|Квас]] · [[Рецепт:Компот|Компот]] </td> </tr> <tr style="border-bottom: 1px solid #ccc;"> <td style="font-weight: bold; padding: 6px; background: #f5f5f5; vertical-align: top;">Ритуальна кухня</td> <td style="padding: 6px; vertical-align: top;"> [[Рецепт:Боговиця|Боговиця]] · [[Рецепт:Верч|Верч]] · [[Рецепт:Дивень|Дивень]] · [[Рецепт:Калита|Калита]] · [[Рецепт:Коровай|Коровай]] · [[Рецепт:Калач|Калач]] · [[Рецепт:Крашанка|Крашанка]] · [[Рецепт:Коливо|Коливо (Кутя)]] · [[Рецепт:Лежень|Лежень]] · [[Рецепт:Паска|Паска]] · [[Рецепт:Узвар|Узвар]] · [[Рецепт:Шишки (випічка)|Шишки]] · [[Рецепт:Шуліки|Шуліки]]<sup>†</sup> </td> </tr> <tr> <td colspan="2" style="padding: 4px 6px; font-size: 85%; color: #555; text-align: left; background: #fafafa;"> <sup>†</sup> — страви та напої, що практично вийшли з активного вжитку (історичні кулінарні архаїзми) [INDEX_0.1.1]. </td> </tr> </table> </div> 1rsvkxycshtakah0y38qyvludhwb98l