Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Не вдупляю Stream API / 6 сообщений из 6, страница 1 из 1
29.12.2017, 14:08
    #39577910
mesier
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не вдупляю Stream API
Хочу написать метод, которому передаём на вход файл с данными, внутри по записям данные парсим и складываем в Pojo, на выход передаём вычитанные объекты.
FileInputStream >> MyPojo >> Stream
Код: java
1.
public Stream<MyPojo> getMyPojoStream(String dataFileName);


Но не могу ничего предумать кроме как сначала в List считать, затем его в Stream обернуть. Профит от такого подхода не вижу..
Может таки есть способ лучше, чтобы Streaming как бы соответствовал своему названию?
...
Рейтинг: 0 / 0
29.12.2017, 14:20
    #39577919
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не вдупляю Stream API
Да, этот момент не самый простой в стримах.
На вскидку что-то вот такое:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
public Stream<MyPojo> load MyPojo () {
        return StreamSupport.stream(new Spliterator<MyPojo>() {
            @Override
            public boolean tryAdvance(Consumer<? super MyPojo> action) {
                if(!dataStreamIsOpen()){
                   openStream();
                }
                if(!dataStreamIsOpen()){
                   MyPojo pj = readNext();
                   if(pj != null) {
                      action.accept(pj) ;
                      return true;
                   } else {
                      closeStream();
                   }
                }
                return false;
            }

            @Override
            public Spliterator<User> trySplit() {
                return null;
            }

            @Override
            public long estimateSize() {
                return total;
            }

            @Override
            public int characteristics() {
                return NONNULL;
            }
        }, false);
    }



Правда, открытие и закрытие InputStream, возможно, стоит вынести наружу. Либо обработку исключений дописать по вкусу.
...
Рейтинг: 0 / 0
29.12.2017, 14:20
    #39577920
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не вдупляю Stream API
...
Рейтинг: 0 / 0
29.12.2017, 14:25
    #39577926
mesier
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не вдупляю Stream API
Ого, как оперативно.. ))
Спасибо, коллеги! Пошел изучать.
С наступающим Новым Годом!
...
Рейтинг: 0 / 0
29.12.2017, 14:28
    #39577930
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не вдупляю Stream API
mesier,

Там второе условие не правильное. И ресурсы в стримах закрывать, наверное, плохая идея. Они же ленивые. До конца могут и не дочитать. Так что закрытие ресурса полюбому надо наружу выносить. Либо нужно чтобы клиентский код всегда полностью стрим вычитывал.
...
Рейтинг: 0 / 0
29.12.2017, 14:29
    #39577931
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не вдупляю Stream API
Blazkowicz,

https://stackoverflow.com/questions/38698182/close-java-8-stream/38698245
У стримов есть метод close(), вот через него и можер ресурсы закрывать.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Не вдупляю Stream API / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]