ConcurrentHashMap/ConcurrentMap/Map.compute
Brian Goetz
brian.goetz at oracle.com
Fri Dec 14 10:02:36 PST 2012
>> We do not have explicit parallel versions of forEach for anything yet.
>> Existing
>> forEach methods are inherently sequential.
>
> But does any spec promise this?
Our mantra has been "no transparent parallelism." So, I think it should
promise this. If you want parallel forEach you can do:
coll.parallel().forEach()
>> I still find the name "compute" very unsatisfying,
>
> As I mentioned, I initially didn't like these names at all.
> Pasted here for convenience:
>
> V computeIfAbsent(K key, Function<? super K, ? extends V> f);
> V computeIfPresent(K key, BiFunction<? super K, ? super V, ? extends V> f);
> V compute(K key, BiFunction<? super K, ? super V, ? extends V> f);
> V merge(K key, V value, BiFunction<? super V, ? super V, ? extends V> f);
>
> Starting from scratch, I might call computeIfAbsent "establish".
> (Three years ago, when considering a MapMaker-like j.u.c class,
> I proposed several names along these lines but eventually gave up.)
>
> But given computeIfAbsent, the name computeIfPresent seems forced,
> and then computeIfAbsentOrPresent==compute seems forced. And if you
> see the scheme laid out in this way, looks OK. Which is presumably
> why all the CHMV8 users seem to like it.
What about recompute for compute, and recomputeIfPresent for
computeIfPresent? (The former has a slight weirdness about the first
time, since you can't recompute something that isn't yet computed, but
that weirdness seems much less than the unapproachability of compute.
And as far as I can tell, no one has considered these names yet.
More information about the lambda-libs-spec-observers
mailing list