* even more cleanup
This commit is contained in:
parent
c56f9413fc
commit
4c95e5b9ca
|
@ -0,0 +1,29 @@
|
|||
|
||||
package net.sourceforge.filebot.ui.panel.rename.matcher;
|
||||
|
||||
|
||||
import net.sourceforge.filebot.ui.panel.rename.entry.ListEntry;
|
||||
|
||||
|
||||
public class Match {
|
||||
|
||||
private final ListEntry a;
|
||||
private final ListEntry b;
|
||||
|
||||
|
||||
public Match(ListEntry a, ListEntry b) {
|
||||
this.a = a;
|
||||
this.b = b;
|
||||
}
|
||||
|
||||
|
||||
public ListEntry getA() {
|
||||
return a;
|
||||
}
|
||||
|
||||
|
||||
public ListEntry getB() {
|
||||
return b;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,99 @@
|
|||
|
||||
package net.sourceforge.filebot.ui.panel.rename.matcher;
|
||||
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import net.sourceforge.filebot.ui.panel.rename.entry.ListEntry;
|
||||
import net.sourceforge.filebot.ui.panel.rename.metric.SimilarityMetric;
|
||||
|
||||
|
||||
public class Matcher implements Iterator<Match> {
|
||||
|
||||
private final LinkedList<ListEntry> primaryList;
|
||||
private final LinkedList<ListEntry> secondaryList;
|
||||
private final SimilarityMetric similarityMetric;
|
||||
|
||||
|
||||
public Matcher(List<? extends ListEntry> primaryList, List<? extends ListEntry> secondaryList, SimilarityMetric similarityMetric) {
|
||||
this.primaryList = new LinkedList<ListEntry>(primaryList);
|
||||
this.secondaryList = new LinkedList<ListEntry>(secondaryList);
|
||||
this.similarityMetric = similarityMetric;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean hasNext() {
|
||||
return remainingMatches() > 0;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Match next() {
|
||||
ListEntry primaryEntry = primaryList.removeFirst();
|
||||
|
||||
float maxSimilarity = -1;
|
||||
ListEntry mostSimilarSecondaryEntry = null;
|
||||
|
||||
for (ListEntry secondaryEntry : secondaryList) {
|
||||
float similarity = similarityMetric.getSimilarity(primaryEntry, secondaryEntry);
|
||||
|
||||
if (similarity > maxSimilarity) {
|
||||
maxSimilarity = similarity;
|
||||
mostSimilarSecondaryEntry = secondaryEntry;
|
||||
}
|
||||
}
|
||||
|
||||
if (mostSimilarSecondaryEntry != null) {
|
||||
secondaryList.remove(mostSimilarSecondaryEntry);
|
||||
}
|
||||
|
||||
return new Match(primaryEntry, mostSimilarSecondaryEntry);
|
||||
}
|
||||
|
||||
|
||||
public ListEntry getFirstPrimaryEntry() {
|
||||
if (primaryList.isEmpty())
|
||||
return null;
|
||||
|
||||
return primaryList.getFirst();
|
||||
}
|
||||
|
||||
|
||||
public ListEntry getFirstSecondaryEntry() {
|
||||
if (secondaryList.isEmpty())
|
||||
return null;
|
||||
|
||||
return secondaryList.getFirst();
|
||||
}
|
||||
|
||||
|
||||
public int remainingMatches() {
|
||||
return Math.min(primaryList.size(), secondaryList.size());
|
||||
}
|
||||
|
||||
|
||||
public List<ListEntry> getPrimaryList() {
|
||||
return Collections.unmodifiableList(primaryList);
|
||||
}
|
||||
|
||||
|
||||
public List<ListEntry> getSecondaryList() {
|
||||
return Collections.unmodifiableList(secondaryList);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* The remove operation is not supported by this implementation of <code>Iterator</code>.
|
||||
*
|
||||
* @throws UnsupportedOperationException if this method is invoked.
|
||||
* @see java.util.Iterator
|
||||
*/
|
||||
@Override
|
||||
public void remove() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue