public class Loan {
  private Map shares;

// Pominęliśmy metody dostępu, konstruktory oraz bardzo proste metody

  public Map distributePrincipalPayment(double paymentAmount) {
    Map paymentShares = new HashMap();
    Map loanShares = getShares();
    double total = getAmount();
    Iterator it = loanShares.keySet().iterator();
    while(it.hasNext()) {
      Object owner = it.next();
      double initialLoanShareAmount = getShareAmount(owner);
      double paymentShareAmount =
        initialLoanShareAmount / total * paymentAmount;
      Share paymentShare =
        new Share(owner, paymentShareAmount);
      paymentShares.put(owner, paymentShare);

      double newLoanShareAmount =
        initialLoanShareAmount - paymentShareAmount;
      Share newLoanShare =
        new Share(owner, newLoanShareAmount);
      loanShares.put(owner, newLoanShare);
    }
    return paymentShares;
  }

   public double getAmount() {
    Map loanShares = getShares();
    double total = 0.0;
    Iterator it = loanShares.keySet().iterator();
    while(it.hasNext()) {
      Share loanShare = (Share) loanShares.get(it.next());
      total = total + loanShare.getAmount();
    }
    return total;
  }
}
