top10:1.0.0 - ranks first 10 mostly used words, keyed by user
[demos/kafka/wordcount] / src / main / java / de / juplo / kafka / wordcount / top10 / Ranking.java
diff --git a/src/main/java/de/juplo/kafka/wordcount/top10/Ranking.java b/src/main/java/de/juplo/kafka/wordcount/top10/Ranking.java
new file mode 100644 (file)
index 0000000..b748fe5
--- /dev/null
@@ -0,0 +1,53 @@
+package de.juplo.kafka.wordcount.top10;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Arrays;
+import java.util.LinkedList;
+import java.util.List;
+
+
+@Getter
+@Setter
+public class Ranking
+{
+  private Entry[] entries = new Entry[0];
+
+  public void add(Entry newEntry)
+  {
+    if (entries.length == 0)
+    {
+      entries = new Entry[1];
+      entries[0] = newEntry;
+      return;
+    }
+
+    List<Entry> list = new LinkedList<>(Arrays.asList(entries));
+    for (int i = 0; i < list.size(); i++)
+    {
+      Entry entry;
+
+      entry = list.get(i);
+      if (entry.getCount() <= newEntry.getCount())
+      {
+        list.add(i, newEntry);
+        for (int j = i+1; j < list.size(); j++)
+        {
+          entry = list.get(j);
+          if(entry.getWord().equals(newEntry.getWord()))
+          {
+            list.remove(j);
+            break;
+          }
+        }
+        if (list.size() > 10)
+        {
+          list = list.subList(0,10);
+        }
+        entries = list.toArray(num -> new Entry[num]);
+        return;
+      }
+    }
+  }
+}