static LS scoredSearch(S query, Iterable data) { new Map scores; LS searchTerms = scoredSearch_prepare(query); if (empty(searchTerms)) ret asList(data); for (S s : data) { int score = scoredSearch_score(s, searchTerms); if (score != 0) scores.put(s, score); } ret keysSortedByValuesDesc(scores); }