import java.util.*;

public class TestHof {
    public static void main(String[] args) {
	// Embedding a function in Java is a bit cumbersome

	List<Integer> myInts = new ArrayList<Integer>();     
	Hof.transform(Arrays.asList(args), myInts,
		      new Hof.Fun1<Integer, String>() {
	    public Integer apply(String s) { 
		return Integer.parseInt(s);
	    }}
	);

	int sum = Hof.accumulate(myInts, 0,
	    new Hof.Fun2<Integer, Integer, Integer>() {
		public Integer apply(Integer m, Integer n)
		{ return m+n; }
	    });

	int max = Hof.accumulate(myInts, 0,
	    new Hof.Fun2<Integer, Integer, Integer>() {
		public Integer apply(Integer m, Integer n)
		{ return m > n ? m : n; }
	    });
    
	System.out.println("Sum is " + sum);
	System.out.println("Max is " + max);
    }
}
