All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.vertx.core.shareddata.LocalMap Maven / Gradle / Ivy

There is a newer version: 5.0.0.CR1
Show newest version
/*
 * Copyright (c) 2011-2019 Contributors to the Eclipse Foundation
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
 * which is available at https://www.apache.org/licenses/LICENSE-2.0.
 *
 * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
 */

package io.vertx.core.shareddata;

import io.vertx.codegen.annotations.GenIgnore;
import io.vertx.codegen.annotations.VertxGen;

import java.util.Collection;
import java.util.Map;
import java.util.Set;
import java.util.function.BiConsumer;
import java.util.function.BiFunction;
import java.util.function.Function;

/**
 * Local maps can be used to share data safely in a single Vert.x instance.
 * 

* By default the map allows immutable keys and values. * Custom keys and values should implement {@link Shareable} interface. The map returns their copies. *

* This ensures there is no shared access to mutable state from different threads (e.g. different event loops) in the * Vert.x instance, and means you don't have to protect access to that state using synchronization or locks. *

* * Since the version 3.4, this class extends the {@link Map} interface. However some methods are only accessible in Java. * * @author Tim Fox * @see Shareable */ @VertxGen public interface LocalMap extends Map { /** * Get a value from the map * * @param key the key * @return the value, or null if none */ V get(Object key); /** * Put an entry in the map * * @param key the key * @param value the value * @return return the old value, or null if none */ V put(K key, V value); /** * Remove an entry from the map * * @param key the key * @return the old value */ V remove(Object key); /** * Clear all entries in the map */ void clear(); /** * Get the size of the map * * @return the number of entries in the map */ int size(); /** * @return true if there are zero entries in the map */ boolean isEmpty(); /** * Put the entry only if there is no existing entry for that key * * @param key the key * @param value the value * @return the old value or null, if none */ V putIfAbsent(K key, V value); /** * Remove the entry only if there is an entry with the specified key and value. *

* This method is the poyglot version of {@link #remove(Object, Object)}. * * @param key the key * @param value the value * @return true if removed */ boolean removeIfPresent(K key, V value); /** * Replace the entry only if there is an existing entry with the specified key and value. *

* This method is the polyglot version of {@link #replace(Object, Object, Object)}. * * @param key the key * @param oldValue the old value * @param newValue the new value * @return true if removed */ boolean replaceIfPresent(K key, V oldValue, V newValue); /** * Replace the entry only if there is an existing entry with the key * * @param key the key * @param value the new value * @return the old value */ V replace(K key, V value); /** * Close and release the map */ void close(); /** * @return the set of keys in the map */ @GenIgnore Set keySet(); /** * @return the set of values in the map */ @GenIgnore Collection values(); /** * Attempts to compute a mapping for the specified key and its current * mapped value (or {@code null} if there is no current mapping). *

* If the function returns {@code null}, the mapping is removed (or * remains absent if initially absent). If the function itself throws an * (unchecked) exception, the exception is rethrown, and the current mapping * is left unchanged. * * @param key key with which the specified value is to be associated * @param remappingFunction the function to compute a value * @return the new value associated with the specified key, or null if none **/ @GenIgnore @Override V compute(K key, BiFunction remappingFunction); /** * If the specified key is not already associated with a value (or is mapped * to {@code null}), attempts to compute its value using the given mapping * function and enters it into this map unless {@code null}. *

* If the function returns {@code null} no mapping is recorded. If * the function itself throws an (unchecked) exception, the * exception is rethrown, and no mapping is recorded. * * @param key key with which the specified value is to be associated * @param mappingFunction the function to compute a value * @return the current (existing or computed) value associated with * the specified key, or null if the computed value is null */ @GenIgnore @Override V computeIfAbsent(K key, Function mappingFunction); /** * If the value for the specified key is present and non-null, attempts to * compute a new mapping given the key and its current mapped value. *

* If the function returns {@code null}, the mapping is removed. If the * function itself throws an (unchecked) exception, the exception is * rethrown, and the current mapping is left unchanged. * * @param key key with which the specified value is to be associated * @param remappingFunction the function to compute a value * @return the new value associated with the specified key, or null if none */ @GenIgnore @Override V computeIfPresent(K key, BiFunction remappingFunction); /** * Returns {@code true} if this map contains a mapping for the specified * key. * * @param key key whose presence in this map is to be tested * @return {@code true} if this map contains a mapping for the specified key */ @Override boolean containsKey(Object key); /** * Returns @{code true} if this map maps one or more keys to the * specified value. * * @param value value whose presence in this map is to be tested * @return @{code true} if this map maps one or more keys to the specified value */ @Override boolean containsValue(Object value); /** * Returns a {@link Set} view of the mappings contained in this map. *

* Unlike the default {@link Map} implementation, the set is not backed by the map. So changes * made to the map are not reflected in the set. Entries added or remove to the set are not reflected to the map. * In addition, the entries are not modifiable ({@link java.util.Map.Entry#setValue(Object)} is not supported). * * @return a set view of the mappings contained in this map */ @GenIgnore @Override Set> entrySet(); /** * Performs the given action for each entry in this map until all entries * have been processed or the action throws an exception. *

* Exceptions thrown by the action are relayed to the caller. * * @param action The action to be performed for each entry */ @GenIgnore @Override void forEach(BiConsumer action); /** * Returns the value to which the specified key is mapped, or * {@code defaultValue} if this map contains no mapping for the key. * * @param key the key whose associated value is to be returned * @param defaultValue the default mapping of the key * @return the value to which the specified key is mapped, or {@code defaultValue} if this map contains no mapping * for the key */ @Override V getOrDefault(Object key, V defaultValue); /** * If the specified key is not already associated with a value or is * associated with null, associates it with the given non-null value. * Otherwise, replaces the associated value with the results of the given * remapping function, or removes if the result is {@code null}. This * method may be of use when combining multiple mapped values for a key. * * @param key key with which the resulting value is to be associated * @param value the non-null value to be merged with the existing value * associated with the key or, if no existing value or a null value * is associated with the key, to be associated with the key * @param remappingFunction the function to recompute a value if present * @return the new value associated with the specified key, or null if no * value is associated with the key */ @GenIgnore @Override V merge(K key, V value, BiFunction remappingFunction); /** * Copies all of the mappings from the specified map to this map. The effect of this call is equivalent to that * of calling {@link #put(Object, Object) put(k, v)} on this map once for each mapping from key {@code k} to value * {@code v} in the specified map. The behavior of this operation is undefined if the specified map is modified * while the operation is in progress. * * @param m mappings to be stored in this map */ @GenIgnore @Override void putAll(Map m); /** * Removes the entry for the specified key only if it is currently * mapped to the specified value. * * @param key key with which the specified value is associated * @param value value expected to be associated with the specified key * @return {@code true} if the value was removed */ @Override @GenIgnore boolean remove(Object key, Object value); /** * Replaces the entry for the specified key only if currently * mapped to the specified value. * * @param key key with which the specified value is associated * @param oldValue value expected to be associated with the specified key * @param newValue value to be associated with the specified key * @return {@code true} if the value was replaced */ @Override @GenIgnore boolean replace(K key, V oldValue, V newValue); /** * Replaces each entry's value with the result of invoking the given * function on that entry until all entries have been processed or the * function throws an exception. Exceptions thrown by the function are * relayed to the caller. * * @param function the function to apply to each entry */ @GenIgnore @Override void replaceAll(BiFunction function); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy