Не получается добавить параметр в объекты внутри стрима аргументов

Рейтинг: 0Ответов: 1Опубликовано: 19.05.2023

Есть stream аргументов-объектов для передачи их в метод с помощью @MethodSource:

var streamData = Stream.of(
        Arguments.of(Optional.of(MyObject.builder()
            .PARAMETER_1("value1")
            .PARAMETER_2("value2")
            .PARAMETER_3("value3")
            .build())),
        Arguments.of(Optional.of(MyObject.builder()
            .PARAMETER_1("value1")
            .PARAMETER_2("value2")
            .PARAMETER_3("value3")
            .build())));

Подскажите пожалуйста, как правильно создать новый аналогичный стрим на основе вышеуказанного, где у объектов MyObject добавлен параметр: PARAMETER_4 = "value4" ?

Пробовал, но ругается на попытке приведения типов.

var newStreamData = streamData.map(Arguments::get)
        .map((Object[] t) -> Arrays.stream(Optional.of(t).get()))
        .flatMap((Object[] t) -> {
          MyObject o = (MyObject) t;
              o.setPARAMETER_4(value4);
          return  Arguments.of(Optional.of(o)));
        }.collect(Collectors.toList());

Ответы

▲ 0Принят
        Stream<Arguments> newStreamData = streamData.map(a -> (Optional<?>) a.get()[0])
                .map(t -> t.map(o -> {
                            var mo = (MyObject) o;
                            mo.setPARAMETER_4(value4);
                            return Arguments.of(Optional.of(mo));
                        }
                ).orElse(Arguments.of(Optional.<MyObject>empty())));