@SuppressWarnings("unchecked")
    public static <E> List<E> intersection(final List<E> list, final List<E> ... lists) {
        final Stack<List<E>> stack = new Stack<List<E>>();
        stack.push(list);
        for (int index = 0; index < lists.length; index += 1) {
          stack.push(intersection(stack.peek(), lists[index]));
        }
        return stack.peek();
    }
@ SuppressWarnings ( "unchecked" ) public static < E > List < E > intersection ( final List < E > list , final List < E > ... lists ) { final Stack < List < E > > stack = new Stack < List < E > > ( ) ; stack . push ( list ) ; for ( int index = 0 ; index < lists . length ; index += 1 ) { stack . push ( intersection ( stack . peek ( ) , lists [ index ] ) ) ; } return stack . peek ( ) ; }
/*
_.intersection([1, 2, 3], [101, 2, 1, 10], [2, 1]);
=> [1, 2]