2017-08-26 6 views
1

Ich habe gerade über Guava Caching herausgefunden, und alle Beispiele, die ich sehe, verwenden Karte, Schlüssel und Wert.Wie verwende ich den Guava Cache mit Ablaufzeit für eine ArrayList?

Gibt es eine Möglichkeit, Guava-Cache für eine ArrayList zu verwenden?

Ich habe eine ArrayList, die Elemente hat, jedes Element hat 60 Sekunden zu leben, danach sollte es entfernt werden, schätze ich irgendwelche Vorschläge.

Und ist es möglich, eine Methode nach dem Entfernen jedes Elements auszulösen? Wenn beispielsweise eine Nummer aus der Liste entfernt wird, muss der Durchschnitt erneut berechnet werden.

Antwort

2

Gibt es eine Möglichkeit, Guava-Cache für eine ArrayList zu verwenden?

Guava Cache ist entworfen, um durch Schlüssel abgefragt werden. Sie könnten jedoch den Index Ihrer ArrayList als Schlüssel verwenden oder eine eindeutige Eigenschaft des Objekts als Schlüssel auswählen (obwohl, wie ich es verstehe, die Werte in der Reihenfolge gespeichert werden müssen, in der sie hinzugefügt wurden).

Und ist es möglich, eine Methode nach dem Entfernen jedes Elements auszulösen?

Ja, beim Erstellen Ihres Cache<K, V>, setzen Sie RemovalListener<K,V>.

Zum Beispiel:

Cache<String, String> cache = CacheBuilder.newBuilder() 
    .expireAfterWrite(60, TimeUnit.SECONDS) 
    .removalListener(new RemovalListener<String, String>() { 
     public void onRemoval(RemovalNotification<String, String> removal) { 
     // Compute the average here 
     }   
    }) 
    .build(); 
+0

so sagen Sie so etwas wie dieses: Cache >? Wenn ja, dann wird jeder Schlüssel eine neue ArrayList haben, oder? – secret

+0

Welche Objekte speichern Sie genau in der 'ArrayList', sind das ganze Zahlen? – syntagma

+0

Ja, das sind ganze Zahlen – secret