package clear.util.cluster; import clear.util.tuple.JObjectDoubleTuple; import com.carrotsearch.hppc.ObjectDoubleOpenHashMap; import com.carrotsearch.hppc.ObjectIntOpenHashMap; import com.carrotsearch.hppc.cursors.ObjectCursor; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Collections; public class Prob1dMap extends ObjectIntOpenHashMap<String> { public int n_total; public Prob1dMap() { n_total = 0; } public void increment(String key) { put(key, get(key) + 1); n_total++; } public double getProb(String key) { return (double) get(key) / n_total; } public ObjectDoubleOpenHashMap<String> getProbMap() { ObjectDoubleOpenHashMap<String> map = new ObjectDoubleOpenHashMap<>(size()); for (ObjectCursor<String> cur : keys()) { map.put(cur.value, getProb(cur.value)); } return map; } /** * @return sorted list generated from a map: P(1D) */ public ArrayList<JObjectDoubleTuple<String>> getProbList() { ArrayList<JObjectDoubleTuple<String>> list = new ArrayList<>(size()); for (ObjectCursor<String> cur : keys()) { list.add(new JObjectDoubleTuple<>(cur.value, getProb(cur.value))); } Collections.sort(list); return list; } public String toStringProb() { StringBuilder build = new StringBuilder(); DecimalFormat format = new DecimalFormat("#0.0000"); for (JObjectDoubleTuple<String> tup : getProbList()) { build.append(tup.object); build.append("\t"); build.append(format.format(tup.value)); build.append("\n"); } return build.toString().trim(); } }