Mapstruct -czy mozna utworzyć jeden obiekt z listy obiektów

0

Witam,
Chcę zmapować obiekt Candle, który składa sie z ticków (np 100 ticków) w danym interwale czasowym(np 1 min).Candle zawiera cenę otwarcia,zamkniecia, cenę maksymalną, minimalną, czas powstania świeczki oraz wolumen(ilość ticków). Chciałem zrobić to poprze @DecoratedWith i w osobnej klasie implementuje logikę.
Jednak w parametrze dałem listę ticków(od razu cały interwał). Przy kompilacji wyskakuje błąd :Can't generate mapping method from iterable type to non-iterable type.
Czy w ogóle jest możliwość zmapowania obiektu z listy obiektów w Mapstruct?

0

Message wychodzi a aktora akkowego

private Behavior<Command> handleTickRecord(Tick tick) {
        long period = StringToPeriodMapper.fromStringToPeriodCode(request.period()).getCode();
        long from = roundTime(period, tick.timestamp(), period);
        tickDeque.add(tick);
        if ((tickDeque.getFirst().timestamp() < from)) {
            CandleMapper.INSTANCE.ticksToCandle(tickDeque.stream().toList(),request, from);
        }
        return this;
    }

W mapperze mam sygnature:

Candle ticksToCandle(List<Tick>ticks, UserRequest request,long from);

W Dekratorze właściwa logika:

 @Override
    public Candle ticksToCandle(List<Tick> tick, UserRequest request, long from) {
        return mapTicksToCandle(tick, request, from);
    }


    static Candle mapTicksToCandle(List<Tick> ticks, UserRequest request, long from) {
        List<String> list = ticks.stream().map(Tick::symbol).distinct().collect(Collectors.toList());
        for (String symbol : list) {
            List<Tick> ticksFilteredBySymbol = CandleMapperDecorator.ticks.stream()
                    .filter(v -> v.symbol().equals(symbol))
                    .collect(Collectors.toList());
            tickResults.add(ticksFilteredBySymbol);
        }
        for (int i = 0; i < list.size(); i++) {
            int finalI = i;
                candles.add(
                        ticks.stream()
                                .map(v -> new Candle(
                                        v.provider(),
                                        v.symbol(),
                                        (from - StringToPeriodMapper.fromStringToPeriodCode(request.period()).getCode()),
                                        v.bid(),
                                        tickResults.get(finalI).stream().max(Comparator.comparing(Tick::bid))
                                                .orElseThrow().bid(),
                                        tickResults.get(finalI).stream().min(Comparator.comparing(Tick::bid))
                                                .orElseThrow().bid(),
                                        tickResults.get(finalI).stream().map(Tick::bid)
                                                .reduce((v1, v2) -> v2).orElse(BigDecimal.ZERO),
                                        BigDecimal.valueOf(tickResults.get(finalI).size())))
                                .findFirst()
                                .orElse(
                                        new Candle(
                                                "wrong", null, 0, BigDecimal.ZERO,
                                                BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO))
                );
            }
        return candles.get(0);
    }

1 użytkowników online, w tym zalogowanych: 0, gości: 1