private static <A, B, K> JoinCheckResult<A> doJoinCheck(List<A> listA,
			FieldGetter<A, K> fieldGetterA, List<B> listB,
			FieldGetter<B, K> fieldGetterB, Mapper<B, A> mapper,
			boolean leftJoin) {
		if (listA == null || listB == null || fieldGetterA == null
				|| mapper == null) {
			throw new IllegalArgumentException("Paramter should not by null");
		}
		if (listA.size() == 0) {
			return new JoinCheckResult<A>(true, Collections.<A> emptyList());
		}
		if (listB.size() == 0) {
			if (leftJoin) {
				return new JoinCheckResult<A>(true, new ArrayList<A>(listA));
			} else {
				return new JoinCheckResult<A>(true, Collections.<A> emptyList());
			}
		}
		if (fieldGetterB == null) {
			throw new IllegalArgumentException("Paramter should not by null");
		}
		return new JoinCheckResult<A>(false, null);
	}