top10: 1.1.3 - (GREEN) Implemented `Ranking.equals()` accordingly top10-1.1.3
authorKai Moritz <kai@juplo.de>
Tue, 28 May 2024 19:03:11 +0000 (21:03 +0200)
committerKai Moritz <kai@juplo.de>
Thu, 30 May 2024 10:07:56 +0000 (12:07 +0200)
src/main/java/de/juplo/kafka/wordcount/top10/Ranking.java

index 110ee68..4f56c18 100644 (file)
@@ -105,6 +105,51 @@ public class Ranking
     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.getWord());
+    while (true)
+    {
+      Entry otherEntry = other.entries[i];
+      if (otherEntry.getCounter() != currentCount)
+        return false;
+      otherWordsWithCurrentCount.add(otherEntry.getWord());
+      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.getWord());
+    }
+  }
+
   public static Ranking of(Entry... entries)
   {
     Ranking ranking = new Ranking(entries);