Not logged in.  Login/Logout/Register | List snippets | | Create snippet | Upload image | Upload data

44
LINES

< > BotCompany Repo | #1031875 // MRUAndAllTimeTop_optimized - keep sorted top ten list

JavaX fragment (include) [tags: use-pretranspiled]

Libraryless. Click here for Pure Java version (10127L/55K).

1  
// synchronized except for iterator
2  
persistable sclass MRUAndAllTimeTop_optimized<A> {
3  
  Map<A, Bool> mru = syncMRUCache(10); // most recently used
4  
  new OptimizedMultiSet<A> allTimeTop;
5  
  int allTimeMaxSize = 100;
6  
7  
  // increase a's score in all time top and move to front int MRU
8  
  synchronized void add(A a) {
9  
    mru.remove(a); // force re-insertion
10  
    mru.put(a, true);
11  
    allTimeTop.add(a);
12  
    allTimeTop.truncate(allTimeMaxSize);
13  
  }
14  
  
15  
  synchronized void addAll(Iterable<A> l) { fOr (A a : l) add(a); }
16  
  
17  
  // may count elements twice
18  
  synchronized int size() {
19  
    ret l(mru) + allTimeTop.uniqueSize();
20  
  }
21  
  
22  
  // interleave latest and most often accessed elements
23  
  // iterator not synchronized
24  
  synchronized ItIt<A> mixedIterator() {
25  
    ret uniqueIterator(roundRobinCombinedIterator(
26  
      reversedIterator(keysList(mru)),
27  
      iterator(allTimeTop.highestFirst())));
28  
  }
29  
  
30  
  toString {
31  
    ret shortClassName(this) + " (" + n2(size()) + ")";
32  
  }
33  
  
34  
  // MRU elements in last access order
35  
  // (These aren't that optimized, really. Should replace
36  
  // LinkedHashMap.)
37  
  Cl<A> recent() {
38  
    ret reversedKeysList(mru);
39  
  }
40  
  
41  
  A mostRecent() {
42  
    ret last(keys(mru));
43  
  }
44  
}

Author comment

Began life as a copy of #1024856

download  show line numbers  debug dex  old transpilations   

Travelled to 4 computer(s): bhatertpkbcr, ekrmjmnbrukm, mqqgnosmbjvj, pyentgdyhuwx

No comments. add comment

Snippet ID: #1031875
Snippet name: MRUAndAllTimeTop_optimized - keep sorted top ten list
Eternal ID of this version: #1031875/12
Text MD5: 36cde0f285098a16e614db74876b80de
Transpilation MD5: b14d5f5e062dba2d25680f21bea61d0d
Author: stefan
Category: javax
Type: JavaX fragment (include)
Public (visible to everyone): Yes
Archived (hidden from active list): No
Created/modified: 2022-08-12 03:58:13
Source code size: 1238 bytes / 44 lines
Pitched / IR pitched: No / No
Views / Downloads: 151 / 366
Version history: 11 change(s)
Referenced in: [show references]