TEST-STORE:GREEN
[demos/kafka/wordcount] / src / main / java / de / juplo / kafka / wordcount / top10 / Ranking.java
1 package de.juplo.kafka.wordcount.top10;
2
3 import lombok.*;
4
5 import java.util.Arrays;
6 import java.util.LinkedList;
7 import java.util.List;
8
9
10 @AllArgsConstructor(access = AccessLevel.PRIVATE)
11 @NoArgsConstructor
12 @Data
13 public class Ranking
14 {
15   private Entry[] entries = new Entry[0];
16
17   public Ranking add(Entry newEntry)
18   {
19     if (entries.length == 0)
20     {
21       entries = new Entry[1];
22       entries[0] = newEntry;
23       return this;
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.getCounter() <= newEntry.getCounter())
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 this;
50       }
51     }
52
53     return this;
54   }
55
56   public static Ranking of(Entry... entries)
57   {
58     return new Ranking(entries);
59   }
60 }