import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
class ListenerMap {
final Map
<Integer, Integer
> listeners
= new ConcurrentHashMap
<>();
void increaseListeners(final int id) {
listeners.
merge(id,
1,
Integer::sum
); }
void decreaseListeners(final int id) {
listeners.computeIfPresent(id, ($, count) -> {
if (count == 1) {
/* no more listeners -- do something ? */
System.
out.
println("no more listeners for " + id
); }
return count - 1;
});
}
}
class Ideone {
public static void main
(final String[] argv
) { final ListenerMap map = new ListenerMap();
map.increaseListeners(1);
map.increaseListeners(2);
map.increaseListeners(2);
for (int i = 0; i <= 2; ++i) {
map.decreaseListeners(i);
}
}
}
aW1wb3J0IGphdmEudXRpbC5NYXA7CmltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db25jdXJyZW50SGFzaE1hcDsKCmNsYXNzIExpc3RlbmVyTWFwIHsKCiAgZmluYWwgTWFwPEludGVnZXIsIEludGVnZXI+IGxpc3RlbmVycyA9IG5ldyBDb25jdXJyZW50SGFzaE1hcDw+KCk7CgogIHZvaWQgaW5jcmVhc2VMaXN0ZW5lcnMoZmluYWwgaW50IGlkKSB7CiAgICBsaXN0ZW5lcnMubWVyZ2UoaWQsIDEsIEludGVnZXI6OnN1bSk7CiAgfQoKICB2b2lkIGRlY3JlYXNlTGlzdGVuZXJzKGZpbmFsIGludCBpZCkgewogICAgbGlzdGVuZXJzLmNvbXB1dGVJZlByZXNlbnQoaWQsICgkLCBjb3VudCkgLT4gewogICAgICBpZiAoY291bnQgPT0gMSkgewogICAgICAgIC8qIG5vIG1vcmUgbGlzdGVuZXJzIC0tIGRvIHNvbWV0aGluZyA/ICovCiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJubyBtb3JlIGxpc3RlbmVycyBmb3IgIiArIGlkKTsKICAgICAgfQogICAgICByZXR1cm4gY291bnQgLSAxOwogICAgfSk7CiAgfQp9CgpjbGFzcyBJZGVvbmUgewoKICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihmaW5hbCBTdHJpbmdbXSBhcmd2KSB7CiAgICBmaW5hbCBMaXN0ZW5lck1hcCBtYXAgPSBuZXcgTGlzdGVuZXJNYXAoKTsKICAgIAogICAgbWFwLmluY3JlYXNlTGlzdGVuZXJzKDEpOwogICAgbWFwLmluY3JlYXNlTGlzdGVuZXJzKDIpOwogICAgbWFwLmluY3JlYXNlTGlzdGVuZXJzKDIpOwogICAgCiAgICBmb3IgKGludCBpID0gMDsgaSA8PSAyOyArK2kpIHsKICAgICAgbWFwLmRlY3JlYXNlTGlzdGVuZXJzKGkpOwogICAgfQogIH0JCn0=