public static <T> ISeq<T> front(
		final BaseSeq<? extends T> set,
		final Comparator<? super T> dominance
	) {
		final MSeq<T> front = MSeq.of(set);

		int n = front.size();
		int i = 0;
		while (i < n) {
			int j = i + 1;
			while (j < n) {
				if (dominance.compare(front.get(i), front.get(j)) > 0) {
					--n;
					front.swap(j, n);
				} else if (dominance.compare(front.get(j), front.get(i)) > 0) {
					--n;
					front.swap(i, n);
					--i;
					break;
				} else {
					++j;
				}
			}
			++i;
		}

		return front.subSeq(0, n).copy().toISeq();
	}
Return the elements, from the given input {@code set}, which are part of
the pareto front.
<p>
 <b>Reference:</b><em>
     E. Zitzler and L. Thiele.
     Multiobjective Evolutionary Algorithms: A Comparative Case Study
     and the Strength Pareto Approach,
     IEEE Transactions on Evolutionary Computation, vol. 3, no. 4,
     pp. 257-271, 1999.</em>

@param set the input set
@param dominance the dominance comparator used
@param <T> the element type
@return the elements which are part of the pareto set
@throws NullPointerException if one of the arguments is {@code null}
jenetics.ext/src/main/java/io/jenetics/ext/moea/Pareto.java