Beispiel #1
0
  /**
   * @param a
   * @param b
   * @return
   */
  public static <T1, T2, L extends List<? super T1>, R extends List<? super T2>>
      Difference<L, R> of(Collection<T1> a, Collection<T2> b) {
    List<T1> common = new ArrayList<>();
    List<T1> leftOnly = new ArrayList<>();
    List<T2> rightOnly = new ArrayList<>();

    if (N.isNullOrEmpty(a)) {
      if (N.isNullOrEmpty(b)) {
        // Do nothing. All empty.
      } else {
        rightOnly.addAll(b);
      }
    } else if (N.isNullOrEmpty(b)) {
      leftOnly.addAll(a);
    } else {
      common = N.intersect(a, b);
      leftOnly = N.except(a, b);
      rightOnly = N.except(b, a);
    }

    return new Difference<>((L) common, (L) leftOnly, (R) rightOnly);
  }