for (int j = i+1; j < list.size(); j++)
{
entry = list.get(j);
- if(entry.getWord().equals(newEntry.getWord()))
+ if(entry.getKey().equals(newEntry.getKey()))
{
list.remove(j);
break;
return this;
}
- if (entry.getWord().equals(newEntry.getWord()))
+ if (entry.getKey().equals(newEntry.getKey()))
oldPosition = i;
}
{
Entry entry = this.entries[i];
- if (seenWords.contains(entry.getWord()))
- throw new IllegalArgumentException("Invalid Ranking: Multiple occurrences of word -> " + entry.getWord());
+ if (seenWords.contains(entry.getKey()))
+ throw new IllegalArgumentException("Invalid Ranking: Multiple occurrences of word -> " + entry.getKey());
if (entry.getCounter() > lowesCounting)
throw new IllegalArgumentException("Invalid Ranking: Entries are not sorted correctly");
- seenWords.add(entry.getWord());
+ seenWords.add(entry.getKey());
lowesCounting = entry.getCounter();
}
return this;
}
+ @Override
+ public boolean equals(Object o)
+ {
+ if (this == o)
+ return true;
+ if (o == null)
+ return false;
+ if (!(o instanceof Ranking))
+ return false;
+
+ Ranking other = (Ranking)o;
+
+ if (other.entries.length != entries.length)
+ return false;
+
+ if (entries.length == 0)
+ return true;
+
+ int i = 0;
+ Set<String> myWordsWithCurrentCount = new HashSet<>();
+ Set<String> otherWordsWithCurrentCount = new HashSet<>();
+ Entry myEntry = entries[i];
+ long currentCount = myEntry.getCounter();
+ myWordsWithCurrentCount.add(myEntry.getKey());
+ while (true)
+ {
+ Entry otherEntry = other.entries[i];
+ if (otherEntry.getCounter() != currentCount)
+ return false;
+ otherWordsWithCurrentCount.add(otherEntry.getKey());
+ if (++i >= entries.length)
+ return myWordsWithCurrentCount.equals(otherWordsWithCurrentCount);
+ myEntry = entries[i];
+ if (myEntry.getCounter() != currentCount)
+ {
+ if (!myWordsWithCurrentCount.equals(otherWordsWithCurrentCount))
+ return false;
+ currentCount = myEntry.getCounter();
+ myWordsWithCurrentCount.clear();
+ otherWordsWithCurrentCount.clear();
+ }
+ myWordsWithCurrentCount.add(myEntry.getKey());
+ }
+ }
+
public static Ranking of(Entry... entries)
{
Ranking ranking = new Ranking(entries);