diff options
author | 2012-06-26 22:55:51 -0700 | |
---|---|---|
committer | 2012-06-26 22:55:51 -0700 | |
commit | 78a8d5b6bcbfd9be93e384cada85ecf51fd0b91b (patch) | |
tree | 7cade8137abf9e96b730593bbb3bb7ca7c7799f9 /java | |
parent | 30447239e81ebc4d3634eb9f7212e572e1934c6a (diff) | |
parent | 9da0027b386c23b83c2f9b0121bc15fa15306e3a (diff) | |
download | latinime-78a8d5b6bcbfd9be93e384cada85ecf51fd0b91b.tar.gz latinime-78a8d5b6bcbfd9be93e384cada85ecf51fd0b91b.tar.xz latinime-78a8d5b6bcbfd9be93e384cada85ecf51fd0b91b.zip |
Merge "Implement a comparator for SuggestedWordInfos."
Diffstat (limited to 'java')
-rw-r--r-- | java/src/com/android/inputmethod/latin/Suggest.java | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/java/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java index 4a1c897ca..b69ea3595 100644 --- a/java/src/com/android/inputmethod/latin/Suggest.java +++ b/java/src/com/android/inputmethod/latin/Suggest.java @@ -26,6 +26,8 @@ import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo; import java.io.File; import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.Locale; @@ -384,6 +386,21 @@ public class Suggest { return suggestionsList; } + private static class SuggestedWordInfoComparator implements Comparator<SuggestedWordInfo> { + // This comparator ranks the word info with the higher frequency first. That's because + // that's the order we want our elements in. + @Override + public int compare(final SuggestedWordInfo o1, final SuggestedWordInfo o2) { + if (o1.mScore > o2.mScore) return -1; + if (o1.mScore < o2.mScore) return 1; + if (o1.mCodePointCount < o2.mCodePointCount) return -1; + if (o1.mCodePointCount > o2.mCodePointCount) return 1; + return o1.mWord.toString().compareTo(o2.mWord.toString()); + } + } + private static final SuggestedWordInfoComparator sSuggestedWordInfoComparator = + new SuggestedWordInfoComparator(); + public boolean addWord(final SuggestedWordInfo wordInfo, final int dicTypeId, final int dataType, final ArrayList<SuggestedWordInfo> suggestions, final String consideredWord) { @@ -399,11 +416,8 @@ public class Suggest { && suggestions.get(prefMaxSuggestions - 1).mScore >= score) return true; final int length = wordInfo.mCodePointCount; while (pos < suggestions.size()) { - final int curScore = suggestions.get(pos).mScore; - if (curScore < score - || (curScore == score && length < suggestions.get(pos).mCodePointCount)) { + if (sSuggestedWordInfoComparator.compare(wordInfo, suggestions.get(pos)) < 0) break; - } pos++; } if (pos >= prefMaxSuggestions) { |