code: public <U, E extends Exception> List<Pair<T, U>> rightJoin(final Collection<U> b, final Try.BiPredicate<? super T, ? super U, E> predicate) throws E {
          final List<Pair<T, U>> result = new ArrayList<>(N.size(b));
  
          if (N.isNullOrEmpty(b)) {
              return result;
          } else if (N.isNullOrEmpty(coll)) {
              for (U right : b) {
                  result.add(Pair.of((T) null, right));
              }
          } else {
              for (U right : b) {
                  boolean joined = false;
  
                  for (T left : coll) {
                      if (predicate.test(left, right)) {
                          result.add(Pair.of(left, right));
                          joined = true;
                      }
                  }
  
                  if (joined == false) {
                      result.add(Pair.of((T) null, right));
                  }
              }
          }
  
          return result;
      }
docs: The time complexity is <i>O(n * m)</i> : <i>n</i> is the size of this <code>Seq</code> and <i>m</i> is the size of specified collection <code>b</code>.
  
  @param b
  @param predicate
  @return
  @see <a href="http://stackoverflow.com/questions/5706437/whats-the-difference-between-inner-join-left-join-right-join-and-ful