private BinaryOperator<FundsByFunderDto> sumFunds() { return (fundsByFunder1, fundsByFunder2) -> FundsByFunderDto.builder() .funderUserId(fundsByFunder1.getFunderUserId()) .funderAddress(fundsByFunder1.getFunderAddress()) .fndValue(TokenValueDto.sum(fundsByFunder1.getFndValue(), fundsByFunder2.getFndValue())) .otherValue(TokenValueDto.sum(fundsByFunder1.getOtherValue(), fundsByFunder2.getOtherValue())) .build(); } }
public List<UserFundsDto> aggregate(final List<FundsByFunderDto> fundsByFunder) { return fundsByFunder.stream() .collect(Collectors.groupingBy(funds -> funds.getFunderAddress().toLowerCase() + funds.getFunderUserId(), Collectors.mapping(mapToUserFundDto(), Collectors.reducing(mergeFundsAndRefunds())))) .values() .stream() .filter(Optional::isPresent) .map(Optional::get) .collect(Collectors.toList()); }
private FundsByFunderDto buildFundsByFunderDto(final String funder1UserId, final String funder1Address, final String fndValue, final String zrxValue) { return FundsByFunderDto.builder() .funderUserId(funder1UserId) .funderAddress(funder1Address) .fndValue(fndValue != null ? TokenValueDtoMother.FND().totalAmount(new BigDecimal(fndValue)).build() : null) .otherValue(zrxValue != null ? TokenValueDtoMother.ZRX().totalAmount(new BigDecimal(zrxValue)).build() : null) .build(); }
@Override protected Function<Fund, FundsByFunderDto> mapToFundsByFunderDto() { return fund -> FundsByFunderDto.builder() .funderAddress(fund.getFunderAddress()) .funderUserId(fund.getFunderUserId()) .fndValue(isFndToken(fund) ? tokenValueDtoMapper.map(fund.getTokenValue()) : null) .otherValue(!isFndToken(fund) ? tokenValueDtoMapper.map(fund.getTokenValue()) : null) .build(); }
private Function<FundsByFunderDto, UserFundsDto> mapToUserFundDto() { return fundsByFunder -> UserFundsDto.builder() .funderUserId(fundsByFunder.getFunderUserId()) .funderAddress(fundsByFunder.getFunderAddress()) .fndFunds(pickIfFund(fundsByFunder.getFndValue())) .otherFunds(pickIfFund(fundsByFunder.getOtherValue())) .fndRefunds(pickIfRefund(fundsByFunder.getFndValue())) .otherRefunds(pickIfRefund(fundsByFunder.getOtherValue())) .build(); }
@Override protected Function<Refund, FundsByFunderDto> mapToFundsByFunderDto() { return refund -> FundsByFunderDto.builder() .funderAddress(refund.getFunderAddress()) .funderUserId(refund.getRequestedBy()) .fndValue(isFndToken(refund) ? negate(tokenValueDtoMapper.map(refund.getTokenValue())) : null) .otherValue(!isFndToken(refund) ? negate(tokenValueDtoMapper.map(refund.getTokenValue())) : null) .build(); }
private UserFundsDto buildUserFundsDtoFrom(final FundsByFunderDto funds, final FundsByFunderDto refunds) { return UserFundsDto.builder() .funderUserId(funds.getFunderUserId()) .funderAddress(funds.getFunderAddress()) .fndFunds(funds.getFndValue()) .otherFunds(funds.getOtherValue()) .fndRefunds(refunds.getFndValue()) .otherRefunds(refunds.getOtherValue()) .build(); } }
.build()); final List<FundsByFunderDto> fundsByFunder = Arrays.asList(FundsByFunderDto.builder().funderUserId(funder1UserId).build(), FundsByFunderDto.builder().funderUserId(funder2UserId).build()); final List<FundsByFunderDto> refundsByFunder = Collections.singletonList(FundsByFunderDto.builder().funderUserId(funder2UserId).build());