import java.util.List;
import java.util.ArrayList;
import java.util.function.Supplier;

class SubListMadness {
    public static void main(String[] args) {
        printResult(() -> exampleList().subList(0,3));
        printResult(() -> exampleList().subList(0,4));
        printResult(() -> exampleList().subList(-1,4));
        printResult(() -> exampleList().subList(-1,5));
        printResult(() -> exampleList().subList(0,5));
        printResult(() -> exampleList().subList(5,5));
        printResult(() -> exampleList().subList(5,4));
        printResult(() -> exampleList().subList(4,4)); //WTF?!
    }

    private static List<String> exampleList() {
        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        return list;
    }

    private static <T> void printResult(Supplier<T> s) {
        try {
           System.out.println(s.get()); 
        } catch (Exception e) {
            System.out.println(e.getClass() + " " + e.getMessage());
        }   
    }   
}
