map and null values

Boaz Nahum boaznahum at gmail.com
Tue Jan 1 23:22:06 PST 2013


>From looking on Map::computeIfAbsent and Map::computeIfPresent

it seems that it was greed that get(key)==null  and ! containsKey(key) are
the same (or in other words null values are not interesting)

It is quite sad for some of us, And it is not consistent with methods
Map::putIfAbsent and Map::replace

Also the assumption the null values are not legal is so strong, that the
implementation of replace::

 default boolean replace(K key, V oldValue, V newValue) {
        if (*!containsKey(key) || !get(key).equals(oldValue)*)
            return false;
        put(key, newValue);
        return true;
    }

throws NPE exception in the example below:

mss.put("null", null);

mss.replace("null", null, "null");

Well, I not saying that such decision is not legitimate - but it should be
declared loudly at top of class document.

One last thing, when I suggested
http://mail.openjdk.java.net/pipermail/lambda-dev/2012-October/006351.html,
I was long explainded why it is bad idea(atomic and so), now bunch of
such methods were added to Map.  'computeIfAbsent' is almost what I was
request but from some reason assume that caller want to insert the value
into map if it absent.

Happy New Year
Boaz


More information about the lambda-dev mailing list