import java.util.*; public class Method { // Slide 17 static class Utils { static double sumList(ArrayList lst) { double result = 0.0; for (Number n : lst) { result += n.doubleValue(); } return result; } static Number choose(ArrayList lst) { int i = (int) (Math.random() * lst.size()); // random number < lst.size return lst.get(i); } } // Slide 19 static class UtilsGenerified { static double sumList(List lst) { double result = 0.0; for (T n : lst) { // T also works result += n.doubleValue(); } return result; } static T choose(List lst) { int i = (int) (Math.random() * lst.size()); // random number < lst.size return lst.get(i); } } // Slide 21 static > T max(Collection c) { T max = (T)c.toArray()[0]; for (T element : c) { if (element.compareTo(max) > 0) { max = element; } } return max; } static > void sort(List list) { Collections.sort(list); } static void copyTo(List dst, List src) { dst.addAll(src); } public static void main(String[] args) { // Slide 17 ArrayList numberNumbersToSum = new ArrayList<>(Arrays.asList(2, 1, 3)); ArrayList doubleNumbersToSum = new ArrayList<>(Arrays.asList(2.0, 1.0, 3.0)); ArrayList intNumbersToSum = new ArrayList<>(Arrays.asList(2, 1, 3)); // System.out.println("Utils.sumList(numberNumbersToSum): " + Utils.sumList(numberNumbersToSum)); // Utils.sumList(doubleNumbersToSum); // Utils.sumList(intNumbersToSum); // System.out.println("Utils.choose(numberNumbersToSum): " + Utils.choose(numberNumbersToSum)); // Utils.choose(doubleNumbersToSum); // Utils.choose(intNumbersToSum); // Slide 19 UtilsGenerified.sumList(numberNumbersToSum); UtilsGenerified.sumList(doubleNumbersToSum); UtilsGenerified.sumList(intNumbersToSum); UtilsGenerified.choose(numberNumbersToSum); UtilsGenerified.choose(doubleNumbersToSum); UtilsGenerified.choose(intNumbersToSum); // Slide 21 Collection collectionIntNumbersToSum = intNumbersToSum; // System.out.println("max(collectionIntNumbersToSum): " + max(collectionIntNumbersToSum)); Collection collectionDoubleNumbersToSum = doubleNumbersToSum; // System.out.println("max(collectionDoubleNumbersToSum): "+max(collectionDoubleNumbersToSum)); Collection collectionString = new ArrayList<>(Arrays.asList("a","c","b")); // System.out.println("max(collectionString): "+max(collectionString)); System.out.println("before sort for ints: " + intNumbersToSum); sort(intNumbersToSum); System.out.println("before sort for ints: " + intNumbersToSum); System.out.println("before sort for double: " + doubleNumbersToSum); sort(doubleNumbersToSum); System.out.println("before sort for double: " + doubleNumbersToSum); ArrayList listString = new ArrayList<>(Arrays.asList("a","c","b")); System.out.println("before sort for string: " + listString); sort(listString); System.out.println("before sort for string: " + listString); ArrayList dst = new ArrayList<>(); System.out.println("before copy for dst: " + dst); copyTo(dst, listString); System.out.println("after copy for dst: " + dst); } }