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
1 package de.juplo.kafka.wordcount.top10;
2
3 import lombok.Getter;
4 import lombok.Setter;
5
6 import java.util.Arrays;
7 import java.util.LinkedList;
8 import java.util.List;
9
10
11 @Getter
12 @Setter
13 public class Ranking
14 {
15   private Entry[] entries = new Entry[0];
16
17   public void add(Entry newEntry)
18   {
19     if (entries.length == 0)
20     {
21       entries = new Entry[1];
22       entries[0] = newEntry;
23       return;
24     }
25
26     List<Entry> list = new LinkedList<>(Arrays.asList(entries));
27     for (int i = 0; i < list.size(); i++)
28     {
29       Entry entry;
30
31       entry = list.get(i);
32       if (entry.getCount() <= newEntry.getCount())
33       {
34         list.add(i, newEntry);
35         for (int j = i+1; j < list.size(); j++)
36         {
37           entry = list.get(j);
38           if(entry.getWord().equals(newEntry.getWord()))
39           {
40             list.remove(j);
41             break;
42           }
43         }
44         if (list.size() > 10)
45         {
46           list = list.subList(0,10);
47         }
48         entries = list.toArray(num -> new Entry[num]);
49         return;
50       }
51     }
52   }
53 }