/** * Creates a (defensive) copy of itself. */ public Rankings copy() { return new Rankings(this); } }
public void updateWith(Rankable r) { synchronized (rankedItems) { addOrReplace(r); rerank(); shrinkRankingsIfNeeded(); } }
private void addOrReplace(Rankable r) { Integer rank = findRankOf(r); if (rank != null) { rankedItems.set(rank, r); } else { rankedItems.add(r); } }
public void updateWith(Rankings other) { for (Rankable r : other.getRankings()) { updateWith(r); } }
/** * Copy constructor. * @param other */ public Rankings(Rankings other) { this(other.maxSize()); updateWith(other); }
public class SingleFileProcessingTest { private static String[] fileRawData; @BeforeClass public static void fillRawData() { fileRawData = new String[2]; // values are from my head, resembling format from links you've posted fileRawData[0] = "Jacob\t20000\tEmily\t19999"; fileRawData[1] = "Michael\t18000\tMadison\t17000"; } @Test public void test() { Rankings rankings = new Rankings(); rankings.process(fileRawData); assertEquals("Jacob", rankings.getTop().getName()); assertEquals("Madison", rankings.getScorerOfPosition(4).getName()); assertEquals(18000, rankings.getScoreOf("Michael")); assertEquals(4, rankings.getSize()); } }
public class RankingsProcessingTest { @Test public void test() { Rankings rankings = new Rankings(); rankings.addScorer(new Scorer("Jacob", 20000)); rankings.addScorer(new Scorer("Emily", 19999)); rankings.addScorer(new Scorer("Michael", 18000)); rankings.addScorer(new Scorer("Madison", 17000)); assertEquals("Jacob", rankings.getTop().getName()); // assertEquals("Madison", rankings.getScorerOfPosition(4).getName()); // implementation of getScorerOfPosition(int) left as exercise :) assertEquals(18000, rankings.getScoreOf("Michael")); assertEquals(4, rankings.getSize()); } }
@Override void updateRankingsWithTuple(Tuple tuple) { Rankings rankingsToBeMerged = (Rankings) tuple.getValue(0); super.getRankings().updateWith(rankingsToBeMerged); super.getRankings().pruneZeroCounts(); }
@Override void updateRankingsWithTuple(Tuple tuple) { Rankable rankable = RankableObjectWithFields.from(tuple); super.getRankings().updateWith(rankable); }
private void emitRankings(BasicOutputCollector collector) { collector.emit(new Values(rankings.copy())); getLogger().debug("Rankings: " + rankings); }
@Override public void execute(Tuple input, BasicOutputCollector basicOutputCollector) { Rankings rankings = (Rankings) input.getValueByField("rankings"); /** * TODO:此处2个步骤的操作应该合并成一个lua操作,不过考虑到更新频率低,并且设置了globalGrouping,已经不存在并发状况了 */ hashOperations.getOperations().delete(WORD_COUNT_TOP_N_REAL_TIME_KEY); rankings.getRankings().forEach(rankable -> { String word = (String) rankable.getObject(); long count = rankable.getCount(); hashOperations.put(WORD_COUNT_TOP_N_REAL_TIME_KEY, word, count); }); }
public void updateWith(Rankings other) { for (Rankable r : other.getRankings()) { updateWith(r); } }
/** * Copy constructor. * * @param other */ public Rankings(Rankings other) { this(other.maxSize()); updateWith(other); }
@Override void updateRankingsWithTuple(Tuple tuple) { Rankings rankingsToBeMerged = (Rankings) tuple.getValue(0); super.getRankings().updateWith(rankingsToBeMerged); super.getRankings().pruneZeroCounts(); }
@Override void updateRankingsWithTuple(Tuple tuple) { Rankable rankable = RankableObjectWithFields.from(tuple); super.getRankings().updateWith(rankable); }
private void emitRankings(BasicOutputCollector collector) { collector.emit(new Values(rankings.copy())); getLogger().debug("Rankings: " + rankings); }
public void updateWith(Rankable r) { synchronized (rankedItems) { addOrReplace(r); rerank(); shrinkRankingsIfNeeded(); } }
public void updateWith(Rankings other) { for (Rankable r : other.getRankings()) { updateWith(r); } }
/** * Copy constructor. * @param other */ public Rankings(Rankings other) { this(other.maxSize()); updateWith(other); }
@Override void updateRankingsWithTuple(Tuple tuple) { Rankings rankingsToBeMerged = (Rankings) tuple.getValue(0); super.getRankings().updateWith(rankingsToBeMerged); super.getRankings().pruneZeroCounts(); }