В java-потоках можно ли использовать переменную, которую вы получите в предложении фильтра внутри области карты?

Я пытаюсь воспроизвести следующее поведение с помощью потоков:

public List<ObjDTO> getList(param1){
        List<SomeObj> allObjs = getAll(param1);
        List<ObjDTO> finalList = new ArrayList<>();

        for (SomeObj someObj : allObjs){
             SomeEnum someEnum = methodcall(someObj, param1);
                 if (!SomeEnum.VALUE.equals(someEnum)){
                     finalList.add(new ObjDTO(someObj, someEnum.getMessage()));
                 }
        }
    return finalList;
    }

Что у меня есть до сих пор:

public List<ObjDTO> getList(param1){
            List<SomeObj> allObjs = getAll(param1);
                    return allObjs.stream()
                                 .filter(someObj -> !SomeEnum.VALUE.equals(methodcall(someObj, param1)))
                                 .map(someObj -> new ObjDTO(someObj, someEnum.getMessage()))
                                 .collect(Collectors.toList());
}

Проблема здесь в том, что у меня больше нет этого someEnum, поэтому мне нужно как-то создать переменную в filter() и использовать ее внутри map(). Есть ли способ сделать это или кто-нибудь найдет лучший подход?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
30
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете сделать это с помощью flatMap:

return allObjs.stream()
    .flatMap(someObj ->
        Stream.of(methodcall(someObj, param1))
            .filter(someEnum -> !SomeEnum.VALUE.equals(someEnum))
            .map(someEnum -> Stream.of(new ObjDTO(someObj, someEnum.getMessage()))))
    .collect(toList());

Я попробовал этот подход, и теперь я получаю сообщение об ошибке, потому что метод должен был возвращать список <ObjDTO>, а вместо этого возвращал список <Stream<ObjDTO>>. Знаете ли вы решение этой проблемы?

Jonas Trifas 30.03.2022 20:33

эта строка вызывала это:

Jonas Trifas 30.03.2022 20:36

Другие вопросы по теме