public class Loan { private Subscriber borrower; private String callNumber; private Date returnDate; private boolean wasReturned; public Loan(Subscriber borrower, String callNumber, Date returnDate, boolean wasReturned) { this.borrower = borrower; this.callNumber = callNumber; this.returnDate = returnDate; this.wasReturned = wasReturned; } public Subscriber getBorrower() { return borrower; } public String getCallNumber() { return callNumber; } public Date getReturnDate() { return returnDate; } public boolean isReturned() { return wasReturned; } public void setReturned(boolean newValue) { wasReturned = newValue; } } import java.util.*; public class Subscriber { String name; ArrayList loans; public Subscriber(String name) { this.name = name; loans = new ArrayList(); } public Loan findLoan(String callNumber) { for (int i = 0; i < loans.size(); i++) { if ( loans.get(i).getCallNumber().equalsIgnoreCase(callNumber) && loans.get(i).isReturned() == false) { return loans.get(i); } } return null; } public boolean addLoan(String callNumber, Date returnDate, boolean isReturned) { if (findLoan(callNumber) != null) { return false; } this.loans.add(new Loan(this, callNumber, returnDate, isReturned); return true; } public ArrayList getLoans(LoanFilter filter) { ArrayList filtered = new ArrayList(); for (int i=0; i < loans.size(); i++ ) { if (filter.accept(loans.get(i))) { filtered.add(loans.get(i)); } } return filtered; } }