import java.util.ArrayList;
import java.util.List;

/** Bounded types, wildcards y la regla PECS. */
public class WildcardDemo {
    public static void main(String[] args) {
        List<Integer> marks = List.of(15, 18, 11);
        List<String> words = List.of("pera", "uva", "mango");
        System.out.println("max: " + ListUtils.max(marks) + ", " + ListUtils.max(words));

        // sum acepta List<Integer> y List<Double> gracias a ? extends Number.
        List<Double> prices = List.of(2.5, 4.0);
        System.out.println("sum: " + ListUtils.sum(marks) + ", " + ListUtils.sum(prices));

        // addCounting acepta List<Integer>, List<Number> y List<Object>.
        List<Number> numbers = new ArrayList<>();
        ListUtils.addCounting(numbers, 3);
        numbers.add(0.5);
        System.out.println("numbers: " + numbers);

        // copy: de una lista de Integer (productor) a una de Object (consumidor).
        List<Object> all = new ArrayList<>(List.of("inicio"));
        ListUtils.copy(all, marks);
        System.out.println("all: " + all);
    }
}
