package net.filebot.similarity; import static java.util.Arrays.*; public class MetricCascade implements SimilarityMetric { private final SimilarityMetric[] cascade; public MetricCascade(SimilarityMetric... cascade) { this.cascade = cascade; } @Override public float getSimilarity(Object o1, Object o2) { float f = 0; for (SimilarityMetric metric : cascade) { float similarity = metric.getSimilarity(o1, o2); if (Math.abs(similarity) >= Math.abs(f)) { // perfect match, ignore remaining metrics if (similarity >= 1) { return similarity; } // possible match or perfect negative match f = similarity; } } return f; } @Override public String toString() { return getClass().getSimpleName() + ' ' + asList(cascade); } }