Есть ли лучший способ определить, вернуло ли ComputeIfAbsent новое значение?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Есть ли лучший способ определить, вернуло ли ComputeIfAbsent новое значение?

Сообщение Anonymous »

У меня есть такой код:

Код: Выделить всё

ConcurrentMap map = new ConcurrentHashMap();
AtomicBoolean isNew = new AtomicBoolean(false);
String result = map.computeIfAbsent("foo", key -> {
isNew.set(true);
return "bar";
});
result = result + "common op that occurs on both old and new results";
if (isNew.get()) {
// op that occurs only on new results.  Must occur after common op.
}
Есть ли более красивый способ сделать это, учитывая, что мой метод вычислений достаточно тяжелый, и я не хочу его создавать, и немедленно отбрасываю вычисленные значения, если они не являются нужно?

Изменить: меня также беспокоит, насколько хорошо мой код справится с многопоточностью. Если два потока попытаются вычислить один и тот же ключ, я думаю, что они оба могут сообщить true для isNew.

Подробнее здесь: https://stackoverflow.com/questions/610 ... -new-value
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»