interface Set { boolean contains(A x); void include(A x); } class TreeSet implements Set { private (A, A) -> boolean less; Tree elems = new EmptyTree(); public TreeSet((A, A) -> boolean less) { this.less = less; } public boolean contains(A x) { return elems.contains(less, x); } public void include(A x) { elems = elems.insert(less, x); } } public class TestForDuplicates { static boolean stringLess(String x, String y) { return x.compareTo(y) < 0; } public static void main(String[] args) { Set s = new TreeSet(stringLess); for (int i = 1; i < args.length; i++) s.include(args[i]); System.out.println(s.contains(args[0])); } } public class TestForDuplicatesAnonymous { public static void main(String[] args) { Set s = new TreeSet( fun(String x, String y) -> boolean { return x.compareTo(y) < 0; } ); for (int i = 1; i < args.length; i++) s.include(args[i]); System.out.println(s.contains(args[0])); } }