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;
}

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 ; }
return a such that a exists in c1 and a exists in c2 . always returns a new collection .
