package focusedCrawler.link.frontier.selector; import java.util.ArrayList; import java.util.List; import com.google.common.collect.MinMaxPriorityQueue; import focusedCrawler.link.frontier.LinkRelevance; public class TopkLinkSelector implements LinkSelector { private MinMaxPriorityQueue<LinkRelevance> topkLinks; @Override public void startSelection(int numberOfLinks) { this.topkLinks = MinMaxPriorityQueue .orderedBy(LinkRelevance.DESC_ORDER_COMPARATOR) .maximumSize(numberOfLinks) // keep only top-k items .create(); } @Override public void evaluateLink(LinkRelevance link) { if(link.getRelevance() > 0) { topkLinks.add(link); } } @Override public List<LinkRelevance> getSelectedLinks() { List<LinkRelevance> selectedLinks = new ArrayList<>(topkLinks); this.topkLinks = null; // clean-up reference return selectedLinks; } }