1 Востаннє редагувалося vitek (24.10.2023 22:40:01)

Тема: Як очистити/перезапустити фільтр/стрім

Переписую/імплементую стандартний стрім, створюю свої фільтри та хочу після якогось з фільтрів та виводу елементів в консоль, пройтись ще раз по тим же елементам або по новим.
Вимоги : це моя "домашня робота" (робота(не ІТ) платила за курси, хоч вони і для початківців а я щось більше знаю, але як відомо "дареному коню.."), отже вимоги вільний/творчий підхід, креативність. Мені і раніше стріми подобались (модно/молодіжно) а тут така мотивація - як не використати старі знання?! Може хто підкаже або сам "маявся такою же.." головоломною/експериментом.
Пробував

System.out.println("TEST NOT DONE-> ");
reception.rooms().limit(15).forEach(System.out::println);
// цей стрім працює, показує 15 елементівб а нижній - лише 5
// далі після peek я ще фільтрів накидав і мені здалось що вони невірні, а ні, непрацє вже тут!
System.out.println("TEST NOT DONE-> ");
reception.rooms()
     .limit(20)          // HERE ARE A MISTAKE : limit = 5;
     .peek(System.out::println)

А це в самому фільтрі

    // PROBABLY HERE ARE MISTAKE
    // why do we use findFirst()? because we need terminal operation and start new Stream
    // and findFirst() map one to many elements, where flatMap it`s mapping each elment to many (namy-to-many) that not good.
    public StreamOfRooms<T> clearFilter(StreamOfRooms<T> base) {
        System.out.println("Inside Clear filter");
        return new StreamOfRooms<>(this.findFirst().stream().flatMap(i -> base));
    }

Ну і написав в commit на github що там не так. Дякую.

2

Re: Як очистити/перезапустити фільтр/стрім

Як розуміти слово "перезапучити"?
Ви не місцевий?

3

Re: Як очистити/перезапустити фільтр/стрім

Droid 77 написав:

Як розуміти слово "перезапучити"?
Ви не місцевий?

Перезапустити/рестартувати. Помилився при наборі тексту.
Так не місцевий, та причина не в цьому. Був втомлений, неуважний і помилився.
Ось тут стрічка 90 https://github.com/Vicktrix/HotelApp/bl … Rooms.java
На жаль на протязі тижня я не мав часу доробити цей бранч ( та й порад/пропозицій в темі мені не накидали що "не знаю за що перше братись", на жаль), але "дивлячись на це здалеку" мені його потрібно було просто закрити а потім знову запустити, і це ніяк не ламає моє бажання зробити Use Case так щоб в мейні все було в стилі ланцюжка.
А взагалі як людині що намагається прокласти собі шлях в Java розробники мені хотілось би почути фідбек.

4

Re: Як очистити/перезапустити фільтр/стрім

vitek написав:

.. але "дивлячись на це здалеку" мені його потрібно було просто закрити а потім знову запустити..

Так, але не там, я на це забив  *PARDON* , хотів виправити щось інше, знайшов ще щось, пофіксив і все запрацювало.  :)
https://github.com/Vicktrix/HotelApp це один з тих випадкі закону 20/80, який мені обійшовся в 10/90   %)

5

Re: Як очистити/перезапустити фільтр/стрім

Ніяк. Ще давньогрецький філософ Геракліт казав, що не можна двічі зайти в одну річку, бо це потік і удруге там буде вже інша вода.
Потоки (ітератори, генератори і подібне) - це абстракція послідовної обробки даних. Звідки прийшли дані: з файла, БД, клавіатури, мережі - невідомо і не має значення для потоку, в цьому його сила. Але це також означає, що потік не може йти назад. Ви ж не можете змусити користувача удруге ввести те ж саме? Якщо джерело даних - ваш комп'ютер (масив у пам'яті, файл, база даних), то ви можете перестворити потік і отримати всі ті ж дані знову.

6 Востаннє редагувалося vitek (28.10.2023 00:24:26)

Re: Як очистити/перезапустити фільтр/стрім

koala написав:

Ніяк. Ще давньогрецький філософ Геракліт казав, що не можна двічі зайти в одну річку, бо це потік і удруге там буде вже інша вода.
Потоки (ітератори, генератори і подібне) - це абстракція послідовної обробки даних. Звідки прийшли дані: з файла, БД, клавіатури, мережі - невідомо і не має значення для потоку, в цьому його сила. Але це також означає, що потік не може йти назад. Ви ж не можете змусити користувача удруге ввести те ж саме? Якщо джерело даних - ваш комп'ютер (масив у пам'яті, файл, база даних), то ви можете перестворити потік і отримати всі ті ж дані знову.

Але я вже вирішив це питання, я імплементував свій потік який себе поводить (через стиль ланцюжка) так наче можна це зробити.  *PARDON*