From 408a71cfdcdace8028070a2cd6f4476d38342366 Mon Sep 17 00:00:00 2001 From: Isira Seneviratne Date: Wed, 3 Aug 2022 06:33:54 +0530 Subject: [PATCH] Calculate search score using streams. Co-authored-by: Stypox --- .../PreferenceFuzzySearchFunction.java | 35 ++++++------------- 1 file changed, 10 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/settings/preferencesearch/PreferenceFuzzySearchFunction.java b/app/src/main/java/org/schabi/newpipe/settings/preferencesearch/PreferenceFuzzySearchFunction.java index ea45c68d2..68b0010c4 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/preferencesearch/PreferenceFuzzySearchFunction.java +++ b/app/src/main/java/org/schabi/newpipe/settings/preferencesearch/PreferenceFuzzySearchFunction.java @@ -1,6 +1,7 @@ package org.schabi.newpipe.settings.preferencesearch; import android.text.TextUtils; +import android.util.Pair; import org.apache.commons.text.similarity.FuzzyScore; @@ -8,6 +9,7 @@ import java.util.Comparator; import java.util.Locale; import java.util.Map; import java.util.function.Function; +import java.util.stream.Collectors; import java.util.stream.Stream; public class PreferenceFuzzySearchFunction @@ -72,39 +74,22 @@ public class PreferenceFuzzySearchFunction ); private final PreferenceSearchItem item; - private final float score; + private final double score; - FuzzySearchSpecificDTO( - final PreferenceSearchItem item, - final String keyword) { + FuzzySearchSpecificDTO(final PreferenceSearchItem item, final String keyword) { this.item = item; - - float attributeScoreSum = 0; - int countOfAttributesWithScore = 0; - for (final Map.Entry, Float> we - : WEIGHT_MAP.entrySet()) { - final String valueToProcess = we.getKey().apply(item); - if (valueToProcess.isEmpty()) { - continue; - } - - attributeScoreSum += - FUZZY_SCORE.fuzzyScore(valueToProcess, keyword) * we.getValue(); - countOfAttributesWithScore++; - } - - if (countOfAttributesWithScore != 0) { - this.score = attributeScoreSum / countOfAttributesWithScore; - } else { - this.score = 0; - } + this.score = WEIGHT_MAP.entrySet().stream() + .map(entry -> new Pair<>(entry.getKey().apply(item), entry.getValue())) + .filter(pair -> !pair.first.isEmpty()) + .collect(Collectors.averagingDouble(pair -> + FUZZY_SCORE.fuzzyScore(pair.first, keyword) * pair.second)); } public PreferenceSearchItem getItem() { return item; } - public float getScore() { + public double getScore() { return score; } }