question: public static < T > List < T > intersection ( final Collection < T > c1 , final Collection < T > c2 ) { if ( c1 == null || c2 == null ) { return new ArrayList < > ( ) ; } if ( c1 . size ( ) == 0 || c2 . size ( ) == 0 ) { return new ArrayList < > ( ) ; } final List < T > intersection = new ArrayList < > ( ) ; for ( final T current : c1 ) { if ( c2 . contains ( current ) ) { intersection . add ( current ) ; } } return intersection ; }
target:  return a such that a exists in c1 and a exists in c2. always returns a new collection.