package filter_ws12; public class List { private final T info; private final List next; public List(T info, List next) { this.info = info; this.next = next; } static List filter (List node , Predicate pred ) { if (node == null) return null; S contentFirst = node.info; List rest = node.next; List filtered = filter(rest, pred); if (pred.applies(contentFirst)) { return new List<>(contentFirst, filtered); } else { return filtered; } } }