@Override public boolean equals(Object o){ //NOTE: com.google.common.util.concurrent.AtomicDouble extends Number, hence this class extends number if(o instanceof Number){ return get() == ((Number)o).doubleValue(); } return false; }
public double getCount(T element) { AtomicDouble t = map.get(element); if (t == null) return 0.0; return t.get(); }
@Override public int hashCode(){ //return Double.hashCode(get()); //Java 8+ return Double.valueOf(get()).hashCode(); } }
/** * This method returns element with highest counter value * * @return */ public T argMax() { double maxCount = -Double.MAX_VALUE; T maxKey = null; for (Map.Entry<T, AtomicDouble> entry : map.entrySet()) { if (entry.getValue().get() > maxCount || maxKey == null) { maxKey = entry.getKey(); maxCount = entry.getValue().get(); } } return maxKey; }
/** * This method removes given key from counter * * @param element * @return counter value */ public double removeKey(T element) { AtomicDouble v = map.remove(element); dirty.set(true); if (v != null) return v.get(); else return 0.0; }
public PriorityQueue<Pair<T, Double>> asReversedPriorityQueue() { PriorityQueue<Pair<T, Double>> pq = new PriorityQueue<>(Math.max(1,map.size()), new ReversedPairComparator()); for (Map.Entry<T, AtomicDouble> entry : map.entrySet()) { pq.add(Pair.create(entry.getKey(), entry.getValue().get())); } return pq; }
public PriorityQueue<Pair<T, Double>> asPriorityQueue() { PriorityQueue<Pair<T, Double>> pq = new PriorityQueue<>(Math.max(1,map.size()), new PairComparator()); for (Map.Entry<T, AtomicDouble> entry : map.entrySet()) { pq.add(Pair.create(entry.getKey(), entry.getValue().get())); } return pq; }
/** * This method will increment values of this counter, by counts of other counter * * @param other */ public void incrementAll(CounterMap<F, S> other) { for (Map.Entry<F, Counter<S>> entry : other.maps.entrySet()) { F key = entry.getKey(); Counter<S> innerCounter = entry.getValue(); for (Map.Entry<S, AtomicDouble> innerEntry : innerCounter.entrySet()) { S value = innerEntry.getKey(); incrementCount(key, value, innerEntry.getValue().get()); } } }
/** * This method will remove all elements with counts below given threshold from counter * @param threshold */ public void dropElementsBelowThreshold(double threshold) { Iterator<T> iterator = keySet().iterator(); while (iterator.hasNext()) { T element = iterator.next(); double val = map.get(element).get(); if (val < threshold) { iterator.remove(); dirty.set(true); } } }
/** * This method returns total sum of counter values * @return */ public double totalCount() { if (dirty.get()) rebuildTotals(); return totalCount.get(); }
/** * This method will apply normalization to counter values and totals. */ public void normalize() { for (T key : keySet()) { setCount(key, getCount(key) / totalCount.get()); } rebuildTotals(); }
public double getCount(T element) { AtomicDouble t = map.get(element); if (t == null) return 0.0; return t.get(); }
@Override public boolean equals(Object o){ //NOTE: com.google.common.util.concurrent.AtomicDouble extends Number, hence this class extends number if(o instanceof Number){ return get() == ((Number)o).doubleValue(); } return false; }
@Override public int hashCode(){ //return Double.hashCode(get()); //Java 8+ return Double.valueOf(get()).hashCode(); } }
/** * This method removes given key from counter * * @param element * @return counter value */ public double removeKey(T element) { AtomicDouble v = map.remove(element); dirty.set(true); if (v != null) return v.get(); else return 0.0; }
public PriorityQueue<Pair<T, Double>> asReversedPriorityQueue() { PriorityQueue<Pair<T, Double>> pq = new PriorityQueue<>(map.size(), new ReversedPairComparator()); for (Map.Entry<T, AtomicDouble> entry : map.entrySet()) { pq.add(Pair.create(entry.getKey(), entry.getValue().get())); } return pq; }
/** * This method will increment values of this counter, by counts of other counter * * @param other */ public void incrementAll(CounterMap<F, S> other) { for (Map.Entry<F, Counter<S>> entry : other.maps.entrySet()) { F key = entry.getKey(); Counter<S> innerCounter = entry.getValue(); for (Map.Entry<S, AtomicDouble> innerEntry : innerCounter.entrySet()) { S value = innerEntry.getKey(); incrementCount(key, value, innerEntry.getValue().get()); } } }
public PriorityQueue<Pair<T, Double>> asPriorityQueue() { PriorityQueue<Pair<T, Double>> pq = new PriorityQueue<>(map.size(), new PairComparator()); for (Map.Entry<T, AtomicDouble> entry : map.entrySet()) { pq.add(Pair.create(entry.getKey(), entry.getValue().get())); } return pq; }
/** * This method returns total sum of counter values * @return */ public double totalCount() { if (dirty.get()) rebuildTotals(); return totalCount.get(); }
/** * This method will apply normalization to counter values and totals. */ public void normalize() { for (T key : keySet()) { setCount(key, getCount(key) / totalCount.get()); } rebuildTotals(); }