Splitting payments in a number of installments
I tried to simplify the loop:

    int availableAsset = paymentList.stream().mapToInt(Integer::intValue).sum();

    for (Integer currentInstallmentAmount : installmentList) {
        if (availableAsset &gt; currentInstallmentAmount) {
            balanceList.add(0);
            depositList.add(currentInstallmentAmount);
            availableAsset -= currentInstallmentAmount;
        } else {
            if (availableAsset &gt; 0) {
                depositList.add(currentInstallmentAmount - availableAsset);
                balanceList.add(availableAsset - currentInstallmentAmount);
                availableAsset = 0;
            } else {
                balanceList.add(-currentInstallmentAmount);
                depositList.add(0);
            }
        }
    }


Since we have just this or that decisions (instead of a selection) it's not really a benefit to use polymorphism here.