static L sortedByFields(Collection c, final S... fields) { L l = new ArrayList(c); sort(l, new Comparator() { public int compare(A a, A b) { for (S field : fields) { int x = cmp(getOpt(a, field), getOpt(b, field)); if (x != 0) ret x; } ret 0; } }); ret l; }