List of usage examples for java.util Map computeIfAbsent
default V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction)
From source file:at.gridtec.lambda4j.function.tri.obj.BiObjDoubleFunction.java
/** * Returns a memoized (caching) version of this {@link BiObjDoubleFunction}. Whenever it is called, the mapping * between the input parameters and the return value is preserved in a cache, making subsequent calls returning the * memoized value instead of computing the return value again. * <p>// ww w .j a va 2 s . co m * Unless the function and therefore the used cache will be garbage-collected, it will keep all memoized values * forever. * * @return A memoized (caching) version of this {@code BiObjDoubleFunction}. * @implSpec This implementation does not allow the input parameters or return value to be {@code null} for the * resulting memoized function, as the cache used internally does not permit {@code null} keys or values. * @implNote The returned memoized function can be safely used concurrently from multiple threads which makes it * thread-safe. */ @Nonnull default BiObjDoubleFunction<T, U, R> memoized() { if (isMemoized()) { return this; } else { final Map<Triple<T, U, Double>, R> cache = new ConcurrentHashMap<>(); final Object lock = new Object(); return (BiObjDoubleFunction<T, U, R> & Memoized) (t, u, value) -> { final R returnValue; synchronized (lock) { returnValue = cache.computeIfAbsent(Triple.of(t, u, value), key -> apply(key.getLeft(), key.getMiddle(), key.getRight())); } return returnValue; }; } }
From source file:at.gridtec.lambda4j.function.bi.to.ThrowableToCharBiFunction.java
/** * Returns a memoized (caching) version of this {@link ThrowableToCharBiFunction}. Whenever it is called, the * mapping between the input parameters and the return value is preserved in a cache, making subsequent calls * returning the memoized value instead of computing the return value again. * <p>//from w w w . ja v a 2s .c o m * Unless the function and therefore the used cache will be garbage-collected, it will keep all memoized values * forever. * * @return A memoized (caching) version of this {@code ThrowableToCharBiFunction}. * @implSpec This implementation does not allow the input parameters or return value to be {@code null} for the * resulting memoized function, as the cache used internally does not permit {@code null} keys or values. * @implNote The returned memoized function can be safely used concurrently from multiple threads which makes it * thread-safe. */ @Nonnull default ThrowableToCharBiFunction<T, U, X> memoized() { if (isMemoized()) { return this; } else { final Map<Pair<T, U>, Character> cache = new ConcurrentHashMap<>(); final Object lock = new Object(); return (ThrowableToCharBiFunction<T, U, X> & Memoized) (t, u) -> { final char returnValue; synchronized (lock) { returnValue = cache.computeIfAbsent(Pair.of(t, u), ThrowableFunction.of(key -> applyAsCharThrows(key.getLeft(), key.getRight()))); } return returnValue; }; } }
From source file:at.gridtec.lambda4j.function.bi.obj.ObjByteToByteFunction.java
/** * Returns a memoized (caching) version of this {@link ObjByteToByteFunction}. Whenever it is called, the mapping * between the input parameters and the return value is preserved in a cache, making subsequent calls returning the * memoized value instead of computing the return value again. * <p>//from w w w. j a v a2 s. co m * Unless the function and therefore the used cache will be garbage-collected, it will keep all memoized values * forever. * * @return A memoized (caching) version of this {@code ObjByteToByteFunction}. * @implSpec This implementation does not allow the input parameters or return value to be {@code null} for the * resulting memoized function, as the cache used internally does not permit {@code null} keys or values. * @implNote The returned memoized function can be safely used concurrently from multiple threads which makes it * thread-safe. */ @Nonnull default ObjByteToByteFunction<T> memoized() { if (isMemoized()) { return this; } else { final Map<Pair<T, Byte>, Byte> cache = new ConcurrentHashMap<>(); final Object lock = new Object(); return (ObjByteToByteFunction<T> & Memoized) (t, value) -> { final byte returnValue; synchronized (lock) { returnValue = cache.computeIfAbsent(Pair.of(t, value), key -> applyAsByte(key.getLeft(), key.getRight())); } return returnValue; }; } }
From source file:at.gridtec.lambda4j.function.bi.obj.ObjLongToByteFunction.java
/** * Returns a memoized (caching) version of this {@link ObjLongToByteFunction}. Whenever it is called, the mapping * between the input parameters and the return value is preserved in a cache, making subsequent calls returning the * memoized value instead of computing the return value again. * <p>//from w w w. ja v a 2 s . co m * Unless the function and therefore the used cache will be garbage-collected, it will keep all memoized values * forever. * * @return A memoized (caching) version of this {@code ObjLongToByteFunction}. * @implSpec This implementation does not allow the input parameters or return value to be {@code null} for the * resulting memoized function, as the cache used internally does not permit {@code null} keys or values. * @implNote The returned memoized function can be safely used concurrently from multiple threads which makes it * thread-safe. */ @Nonnull default ObjLongToByteFunction<T> memoized() { if (isMemoized()) { return this; } else { final Map<Pair<T, Long>, Byte> cache = new ConcurrentHashMap<>(); final Object lock = new Object(); return (ObjLongToByteFunction<T> & Memoized) (t, value) -> { final byte returnValue; synchronized (lock) { returnValue = cache.computeIfAbsent(Pair.of(t, value), key -> applyAsByte(key.getLeft(), key.getRight())); } return returnValue; }; } }
From source file:at.gridtec.lambda4j.function.bi.obj.ObjLongToLongFunction.java
/** * Returns a memoized (caching) version of this {@link ObjLongToLongFunction}. Whenever it is called, the mapping * between the input parameters and the return value is preserved in a cache, making subsequent calls returning the * memoized value instead of computing the return value again. * <p>/* ww w .ja va 2s .c o m*/ * Unless the function and therefore the used cache will be garbage-collected, it will keep all memoized values * forever. * * @return A memoized (caching) version of this {@code ObjLongToLongFunction}. * @implSpec This implementation does not allow the input parameters or return value to be {@code null} for the * resulting memoized function, as the cache used internally does not permit {@code null} keys or values. * @implNote The returned memoized function can be safely used concurrently from multiple threads which makes it * thread-safe. */ @Nonnull default ObjLongToLongFunction<T> memoized() { if (isMemoized()) { return this; } else { final Map<Pair<T, Long>, Long> cache = new ConcurrentHashMap<>(); final Object lock = new Object(); return (ObjLongToLongFunction<T> & Memoized) (t, value) -> { final long returnValue; synchronized (lock) { returnValue = cache.computeIfAbsent(Pair.of(t, value), key -> applyAsLong(key.getLeft(), key.getRight())); } return returnValue; }; } }
From source file:at.gridtec.lambda4j.function.bi.obj.ObjByteToLongFunction.java
/** * Returns a memoized (caching) version of this {@link ObjByteToLongFunction}. Whenever it is called, the mapping * between the input parameters and the return value is preserved in a cache, making subsequent calls returning the * memoized value instead of computing the return value again. * <p>/*from w w w . j ava 2 s . c o m*/ * Unless the function and therefore the used cache will be garbage-collected, it will keep all memoized values * forever. * * @return A memoized (caching) version of this {@code ObjByteToLongFunction}. * @implSpec This implementation does not allow the input parameters or return value to be {@code null} for the * resulting memoized function, as the cache used internally does not permit {@code null} keys or values. * @implNote The returned memoized function can be safely used concurrently from multiple threads which makes it * thread-safe. */ @Nonnull default ObjByteToLongFunction<T> memoized() { if (isMemoized()) { return this; } else { final Map<Pair<T, Byte>, Long> cache = new ConcurrentHashMap<>(); final Object lock = new Object(); return (ObjByteToLongFunction<T> & Memoized) (t, value) -> { final long returnValue; synchronized (lock) { returnValue = cache.computeIfAbsent(Pair.of(t, value), key -> applyAsLong(key.getLeft(), key.getRight())); } return returnValue; }; } }
From source file:at.gridtec.lambda4j.function.bi.obj.ObjByteToIntFunction.java
/** * Returns a memoized (caching) version of this {@link ObjByteToIntFunction}. Whenever it is called, the mapping * between the input parameters and the return value is preserved in a cache, making subsequent calls returning the * memoized value instead of computing the return value again. * <p>//from w w w. j a va 2 s .com * Unless the function and therefore the used cache will be garbage-collected, it will keep all memoized values * forever. * * @return A memoized (caching) version of this {@code ObjByteToIntFunction}. * @implSpec This implementation does not allow the input parameters or return value to be {@code null} for the * resulting memoized function, as the cache used internally does not permit {@code null} keys or values. * @implNote The returned memoized function can be safely used concurrently from multiple threads which makes it * thread-safe. */ @Nonnull default ObjByteToIntFunction<T> memoized() { if (isMemoized()) { return this; } else { final Map<Pair<T, Byte>, Integer> cache = new ConcurrentHashMap<>(); final Object lock = new Object(); return (ObjByteToIntFunction<T> & Memoized) (t, value) -> { final int returnValue; synchronized (lock) { returnValue = cache.computeIfAbsent(Pair.of(t, value), key -> applyAsInt(key.getLeft(), key.getRight())); } return returnValue; }; } }
From source file:at.gridtec.lambda4j.function.bi.obj.ObjFloatToByteFunction.java
/** * Returns a memoized (caching) version of this {@link ObjFloatToByteFunction}. Whenever it is called, the mapping * between the input parameters and the return value is preserved in a cache, making subsequent calls returning the * memoized value instead of computing the return value again. * <p>/* ww w . j a v a2 s .c o m*/ * Unless the function and therefore the used cache will be garbage-collected, it will keep all memoized values * forever. * * @return A memoized (caching) version of this {@code ObjFloatToByteFunction}. * @implSpec This implementation does not allow the input parameters or return value to be {@code null} for the * resulting memoized function, as the cache used internally does not permit {@code null} keys or values. * @implNote The returned memoized function can be safely used concurrently from multiple threads which makes it * thread-safe. */ @Nonnull default ObjFloatToByteFunction<T> memoized() { if (isMemoized()) { return this; } else { final Map<Pair<T, Float>, Byte> cache = new ConcurrentHashMap<>(); final Object lock = new Object(); return (ObjFloatToByteFunction<T> & Memoized) (t, value) -> { final byte returnValue; synchronized (lock) { returnValue = cache.computeIfAbsent(Pair.of(t, value), key -> applyAsByte(key.getLeft(), key.getRight())); } return returnValue; }; } }
From source file:at.gridtec.lambda4j.function.bi.obj.ObjIntToByteFunction.java
/** * Returns a memoized (caching) version of this {@link ObjIntToByteFunction}. Whenever it is called, the mapping * between the input parameters and the return value is preserved in a cache, making subsequent calls returning the * memoized value instead of computing the return value again. * <p>/* w ww.ja v a 2 s. c o m*/ * Unless the function and therefore the used cache will be garbage-collected, it will keep all memoized values * forever. * * @return A memoized (caching) version of this {@code ObjIntToByteFunction}. * @implSpec This implementation does not allow the input parameters or return value to be {@code null} for the * resulting memoized function, as the cache used internally does not permit {@code null} keys or values. * @implNote The returned memoized function can be safely used concurrently from multiple threads which makes it * thread-safe. */ @Nonnull default ObjIntToByteFunction<T> memoized() { if (isMemoized()) { return this; } else { final Map<Pair<T, Integer>, Byte> cache = new ConcurrentHashMap<>(); final Object lock = new Object(); return (ObjIntToByteFunction<T> & Memoized) (t, value) -> { final byte returnValue; synchronized (lock) { returnValue = cache.computeIfAbsent(Pair.of(t, value), key -> applyAsByte(key.getLeft(), key.getRight())); } return returnValue; }; } }
From source file:at.gridtec.lambda4j.function.bi.obj.ObjShortToByteFunction.java
/** * Returns a memoized (caching) version of this {@link ObjShortToByteFunction}. Whenever it is called, the mapping * between the input parameters and the return value is preserved in a cache, making subsequent calls returning the * memoized value instead of computing the return value again. * <p>// www . j av a2s . c o m * Unless the function and therefore the used cache will be garbage-collected, it will keep all memoized values * forever. * * @return A memoized (caching) version of this {@code ObjShortToByteFunction}. * @implSpec This implementation does not allow the input parameters or return value to be {@code null} for the * resulting memoized function, as the cache used internally does not permit {@code null} keys or values. * @implNote The returned memoized function can be safely used concurrently from multiple threads which makes it * thread-safe. */ @Nonnull default ObjShortToByteFunction<T> memoized() { if (isMemoized()) { return this; } else { final Map<Pair<T, Short>, Byte> cache = new ConcurrentHashMap<>(); final Object lock = new Object(); return (ObjShortToByteFunction<T> & Memoized) (t, value) -> { final byte returnValue; synchronized (lock) { returnValue = cache.computeIfAbsent(Pair.of(t, value), key -> applyAsByte(key.getLeft(), key.getRight())); } return returnValue; }; } }