Skip to content

Commit 408a71c

Browse files
Calculate search score using streams.
Co-authored-by: Stypox <stypox@pm.me>
1 parent b9b09d3 commit 408a71c

1 file changed

Lines changed: 10 additions & 25 deletions

File tree

app/src/main/java/org/schabi/newpipe/settings/preferencesearch/PreferenceFuzzySearchFunction.java

Lines changed: 10 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
package org.schabi.newpipe.settings.preferencesearch;
22

33
import android.text.TextUtils;
4+
import android.util.Pair;
45

56
import org.apache.commons.text.similarity.FuzzyScore;
67

78
import java.util.Comparator;
89
import java.util.Locale;
910
import java.util.Map;
1011
import java.util.function.Function;
12+
import java.util.stream.Collectors;
1113
import java.util.stream.Stream;
1214

1315
public class PreferenceFuzzySearchFunction
@@ -72,39 +74,22 @@ static class FuzzySearchSpecificDTO {
7274
);
7375

7476
private final PreferenceSearchItem item;
75-
private final float score;
77+
private final double score;
7678

77-
FuzzySearchSpecificDTO(
78-
final PreferenceSearchItem item,
79-
final String keyword) {
79+
FuzzySearchSpecificDTO(final PreferenceSearchItem item, final String keyword) {
8080
this.item = item;
81-
82-
float attributeScoreSum = 0;
83-
int countOfAttributesWithScore = 0;
84-
for (final Map.Entry<Function<PreferenceSearchItem, String>, Float> we
85-
: WEIGHT_MAP.entrySet()) {
86-
final String valueToProcess = we.getKey().apply(item);
87-
if (valueToProcess.isEmpty()) {
88-
continue;
89-
}
90-
91-
attributeScoreSum +=
92-
FUZZY_SCORE.fuzzyScore(valueToProcess, keyword) * we.getValue();
93-
countOfAttributesWithScore++;
94-
}
95-
96-
if (countOfAttributesWithScore != 0) {
97-
this.score = attributeScoreSum / countOfAttributesWithScore;
98-
} else {
99-
this.score = 0;
100-
}
81+
this.score = WEIGHT_MAP.entrySet().stream()
82+
.map(entry -> new Pair<>(entry.getKey().apply(item), entry.getValue()))
83+
.filter(pair -> !pair.first.isEmpty())
84+
.collect(Collectors.averagingDouble(pair ->
85+
FUZZY_SCORE.fuzzyScore(pair.first, keyword) * pair.second));
10186
}
10287

10388
public PreferenceSearchItem getItem() {
10489
return item;
10590
}
10691

107-
public float getScore() {
92+
public double getScore() {
10893
return score;
10994
}
11095
}

0 commit comments

Comments
 (0)