static L scoredSearch(S query, Collection data) { new Map scores; for (S s : data) { int score = 0; if (swic(s, query)) score += 2; else if (containsIgnoreCase(s, query)) ++score; if (score != 0) scores.put(s, score); } ret keysSortedByValueDesc(score); }