public class ObservableMap
extends Object
implements Map
Map decorator that will trigger PropertyChangeEvents when a value changes.
An optional Closure may be specified and will work as a filter, if it returns
true the property will trigger an event (if the value indeed changed),
otherwise it won't. The Closure may receive 1 or 2 parameters, the single one
being the value, the other one both the key and value, for example:
// skip all properties whose value is a closure
def map = new ObservableMap( {!(it instanceof Closure)} )
// skip all properties whose name matches a regex
def map = new ObservableMap( { name, value -> !(name =~ /[A-Z+]/) } )
The current implementation will trigger specialized events in the following scenarios,
you need not register a different listener as those events extend from PropertyChangeEvent
Bound properties
| Modifiers | Name | Description |
|---|---|---|
enum |
ObservableMap.ChangeType |
Enumerates the specialized map change events. |
static class |
ObservableMap.MultiPropertyEvent |
Event fired when multiple property changes are aggregated. |
static class |
ObservableMap.PropertyAddedEvent |
Event fired when a property is added. |
static class |
ObservableMap.PropertyClearedEvent |
Event fired when the map is cleared. |
static class |
ObservableMap.PropertyEvent |
Base event type for observable map changes. |
static class |
ObservableMap.PropertyRemovedEvent |
Event fired when a property is removed. |
static class |
ObservableMap.PropertyUpdatedEvent |
Event fired when a property value changes. |
| Modifiers | Name | Description |
|---|---|---|
static String |
CLEARED_PROPERTY |
Bound property name used for clear events. |
static String |
CONTENT_PROPERTY |
Bound property name for content changes. |
static String |
SIZE_PROPERTY |
Bound property name for map size changes. |
| Constructor and description |
|---|
ObservableMap()Creates an observable map backed by a LinkedHashMap. |
ObservableMap(Closure test)Creates an observable map backed by a LinkedHashMap. |
ObservableMap(Map delegate)Creates an observable map backed by the supplied delegate. |
ObservableMap(Map delegate, Closure test)Creates an observable map backed by the supplied delegate. |
| Type Params | Return Type | Name and description |
|---|---|---|
|
public void |
addPropertyChangeListener(PropertyChangeListener listener)Registers a listener for all observable map events. |
|
public void |
addPropertyChangeListener(String propertyName, PropertyChangeListener listener)Registers a listener for a named bound property. |
|
public void |
clear()Removes all of the mappings from this map (optional operation). The map will be empty after this call returns.
|
|
public boolean |
containsKey(Object key)Returns true if this map contains a mapping for the specified
key. More formally, returns true if and only if
this map contains a mapping for a key k such that
Objects.equals(key, k). (There can be
at most one such mapping.)
|
|
public boolean |
containsValue(Object value)Returns true if this map maps one or more keys to the
specified value. More formally, returns true if and only if
this map contains at least one mapping to a value v such that
Objects.equals(value, v). This operation
will probably require time linear in the map size for most
implementations of the Map interface.
|
|
public Set |
entrySet()Returns a Set view of the mappings contained in this map. The set is backed by the map, so changes to the map are reflected in the set, and vice-versa. If the map is modified while an iteration over the set is in progress (except through the iterator's own remove operation, or through the
setValue operation on a map entry returned by the
iterator) the results of the iteration are undefined. The set
supports element removal, which removes the corresponding
mapping from the map, via the Iterator.remove,
Set.remove, removeAll, retainAll and
clear operations. It does not support the
add or addAll operations.
|
|
public boolean |
equals(Object o)Indicates whether some other object is "equal to" this one.
The
An equivalence relation partitions the elements it operates on into equivalence classes; all the members of an equivalence class are equal to each other. Members of an equivalence class are substitutable for each other, at least for some purposes.
|
|
protected void |
fireMultiPropertyEvent(List<PropertyEvent> events)Fires a multi-property event from a list of events. |
|
protected void |
fireMultiPropertyEvent(ObservableMap.PropertyEvent[] events)Fires a multi-property event from an event array. |
|
protected void |
firePropertyAddedEvent(Object key, Object value)Fires a property-added event. |
|
protected void |
firePropertyClearedEvent(Map values)Fires a map-cleared event. |
|
protected void |
firePropertyEvent(ObservableMap.PropertyEvent event)Publishes a property event to registered listeners. |
|
protected void |
firePropertyRemovedEvent(Object key, Object value)Fires a property-removed event. |
|
protected void |
firePropertyUpdatedEvent(Object key, Object oldValue, Object newValue)Fires a property-updated event. |
|
protected void |
fireSizeChangedEvent(int oldValue, int newValue)Fires the bound size change event. |
|
public Object |
get(Object key)Returns the value to which the specified key is mapped, or null if this map contains no mapping for the key.
More formally, if this map contains a mapping from a key
If this map permits null values, then a return value of
|
|
public Map |
getContent()Returns an unmodifiable snapshot view of the backing map. |
|
protected Map |
getMapDelegate()Returns the mutable backing map. |
|
public PropertyChangeListener[] |
getPropertyChangeListeners()Returns listeners registered for all properties. |
|
public PropertyChangeListener[] |
getPropertyChangeListeners(String propertyName)Returns listeners registered for a named property. |
|
public int |
getSize()Returns the current map size as a bound property value. |
|
protected Closure |
getTest()Returns the optional event filter closure. |
|
public boolean |
hasListeners(String propertyName)Reports whether listeners are registered for a named property. |
|
public int |
hashCode()Returns a hash code value for the object. This method is supported for the benefit of hash tables such as those provided by HashMap.
The general contract of
|
|
public boolean |
isEmpty()Returns true if this map contains no key-value mappings.
|
|
public Set |
keySet()Returns a Set view of the keys contained in this map. The set is backed by the map, so changes to the map are reflected in the set, and vice-versa. If the map is modified while an iteration over the set is in progress (except through the iterator's own remove operation), the results of
the iteration are undefined. The set supports element removal,
which removes the corresponding mapping from the map, via the
Iterator.remove, Set.remove,
removeAll, retainAll, and clear
operations. It does not support the add or addAll
operations.
|
|
public Object |
put(Object key, Object value)Associates the specified value with the specified key in this map (optional operation). If the map previously contained a mapping for the key, the old value is replaced by the specified value. (A map m is said to contain a mapping for a key k if and only
if containsKey(Object) m.containsKey(k) would return
true.)
|
|
public void |
putAll(Map map)Copies all of the mappings from the specified map to this map (optional operation). The effect of this call is equivalent to that of calling put(Object,Object) put(k, v) on this map once for each mapping from key k to value v in the
specified map. The behavior of this operation is undefined if the
specified map is modified while the operation is in progress.
|
|
public Object |
remove(Object key)Removes the mapping for a key from this map if it is present (optional operation). More formally, if this map contains a mapping from key k to value v such that
Objects.equals(key, k), that mapping
is removed. (The map can contain at most one such mapping.)
Returns the value to which this map previously associated the key,
or If this map permits null values, then a return value of
The map will not contain a mapping for the specified key once the call returns.
|
|
public void |
removePropertyChangeListener(PropertyChangeListener listener)Removes a listener registered for all properties. |
|
public void |
removePropertyChangeListener(String propertyName, PropertyChangeListener listener)Removes a listener registered for a named property. |
|
public int |
size()Returns the number of key-value mappings in this map. If the map contains more than Integer.MAX_VALUE elements, returns
Integer.MAX_VALUE.
|
|
public Collection |
values()Returns a Collection view of the values contained in this map. The collection is backed by the map, so changes to the map are reflected in the collection, and vice-versa. If the map is modified while an iteration over the collection is in progress (except through the iterator's own remove operation),
the results of the iteration are undefined. The collection
supports element removal, which removes the corresponding
mapping from the map, via the Iterator.remove,
Collection.remove, removeAll,
retainAll and clear operations. It does not
support the add or addAll operations.
|
Bound property name used for clear events.
Bound property name for content changes.
Bound property name for map size changes.
Creates an observable map backed by a LinkedHashMap.
Creates an observable map backed by a LinkedHashMap.
test - optional event filterCreates an observable map backed by the supplied delegate.
delegate - the backing mapRegisters a listener for all observable map events.
listener - the listener to addRegisters a listener for a named bound property.
propertyName - the property to observelistener - the listener to addRemoves all of the mappings from this map (optional operation). The map will be empty after this call returns.
clear operation
is not supported by this map Returns true if this map contains a mapping for the specified
key. More formally, returns true if and only if
this map contains a mapping for a key k such that
Objects.equals(key, k). (There can be
at most one such mapping.)
key - key whose presence in this map is to be testedtrue if this map contains a mapping for the specified
key Returns true if this map maps one or more keys to the
specified value. More formally, returns true if and only if
this map contains at least one mapping to a value v such that
Objects.equals(value, v). This operation
will probably require time linear in the map size for most
implementations of the Map interface.
value - value whose presence in this map is to be testedtrue if this map maps one or more keys to the
specified value Returns a Set view of the mappings contained in this map.
The set is backed by the map, so changes to the map are
reflected in the set, and vice-versa. If the map is modified
while an iteration over the set is in progress (except through
the iterator's own remove operation, or through the
setValue operation on a map entry returned by the
iterator) the results of the iteration are undefined. The set
supports element removal, which removes the corresponding
mapping from the map, via the Iterator.remove,
Set.remove, removeAll, retainAll and
clear operations. It does not support the
add or addAll operations.
Indicates whether some other object is "equal to" this one.
The equals method implements an equivalence relation
on non-null object references:
x, x.equals(x) should return
true.
x and y, x.equals(y)
should return true if and only if
y.equals(x) returns true.
x, y, and z, if
x.equals(y) returns true and
y.equals(z) returns true, then
x.equals(z) should return true.
x and y, multiple invocations of
x.equals(y) consistently return true
or consistently return false, provided no
information used in equals comparisons on the
objects is modified.
x,
x.equals(null) should return false.
An equivalence relation partitions the elements it operates on into equivalence classes; all the members of an equivalence class are equal to each other. Members of an equivalence class are substitutable for each other, at least for some purposes.
equals method for class Object implements
the most discriminating possible equivalence relation on objects;
that is, for any non-null reference values x and
y, this method returns true if and only
if x and y refer to the same object
(x == y has the value true).
In other words, under the reference equality equivalence
relation, each equivalence class only has a single element.hashCode method, which states
that equal objects must have equal hash codes.obj - the reference object with which to compare.true if this object is the same as the obj
argument; false otherwise.Fires a multi-property event from a list of events.
Fires a multi-property event from an event array.
Fires a map-cleared event.
Publishes a property event to registered listeners.
Fires a property-updated event.
Fires the bound size change event.
Returns the value to which the specified key is mapped,
or null if this map contains no mapping for the key.
More formally, if this map contains a mapping from a key
k to a value v such that
Objects.equals(key, k),
then this method returns v; otherwise
it returns null. (There can be at most one such mapping.)
If this map permits null values, then a return value of
null does not necessarily indicate that the map
contains no mapping for the key; it's also possible that the map
explicitly maps the key to null. The containsKey operation may be used to distinguish these two cases.
key - the key whose associated value is to be returnednull if this map contains no mapping for the keyReturns an unmodifiable snapshot view of the backing map.
Returns the mutable backing map.
Returns listeners registered for all properties.
Returns listeners registered for a named property.
propertyName - the observed property nameReturns the current map size as a bound property value.
Returns the optional event filter closure.
nullReports whether listeners are registered for a named property.
propertyName - the property name to inspecttrue if listeners are registeredReturns a hash code value for the object. This method is supported for the benefit of hash tables such as those provided by HashMap.
The general contract of hashCode is:
hashCode method
must consistently return the same integer, provided no information
used in equals comparisons on the object is modified.
This integer need not remain consistent from one execution of an
application to another execution of the same application.
hashCode method on each of the two objects must produce the
same integer result.
hashCode method on each of the two objects
must produce distinct integer results. However, the programmer
should be aware that producing distinct integer results for
unequal objects may improve the performance of hash tables.
hashCode method defined
by class Object returns distinct integers for distinct objects. Returns true if this map contains no key-value mappings.
true if this map contains no key-value mappings Returns a Set view of the keys contained in this map.
The set is backed by the map, so changes to the map are
reflected in the set, and vice-versa. If the map is modified
while an iteration over the set is in progress (except through
the iterator's own remove operation), the results of
the iteration are undefined. The set supports element removal,
which removes the corresponding mapping from the map, via the
Iterator.remove, Set.remove,
removeAll, retainAll, and clear
operations. It does not support the add or addAll
operations.
Associates the specified value with the specified key in this map
(optional operation). If the map previously contained a mapping for
the key, the old value is replaced by the specified value. (A map
m is said to contain a mapping for a key k if and only
if containsKey(Object) m.containsKey(k) would return
true.)
put operation
is not supported by this mapkey - key with which the specified value is to be associatedvalue - value to be associated with the specified keykey, or
null if there was no mapping for key.
(A null return can also indicate that the map
previously associated null with key,
if the implementation supports null values.) Copies all of the mappings from the specified map to this map
(optional operation). The effect of this call is equivalent to that
of calling put(Object,Object) put(k, v) on this map once
for each mapping from key k to value v in the
specified map. The behavior of this operation is undefined if the
specified map is modified while the operation is in progress.
putAll operation
is not supported by this mapm - mappings to be stored in this map Removes the mapping for a key from this map if it is present
(optional operation). More formally, if this map contains a mapping
from key k to value v such that
Objects.equals(key, k), that mapping
is removed. (The map can contain at most one such mapping.)
Returns the value to which this map previously associated the key,
or null if the map contained no mapping for the key.
If this map permits null values, then a return value of
null does not necessarily indicate that the map
contained no mapping for the key; it's also possible that the map
explicitly mapped the key to null.
The map will not contain a mapping for the specified key once the call returns.
remove operation
is not supported by this mapkey - key whose mapping is to be removed from the mapkey, or
null if there was no mapping for key.Removes a listener registered for all properties.
listener - the listener to removeRemoves a listener registered for a named property.
propertyName - the observed property namelistener - the listener to remove Returns the number of key-value mappings in this map. If the
map contains more than Integer.MAX_VALUE elements, returns
Integer.MAX_VALUE.
Returns a Collection view of the values contained in this map.
The collection is backed by the map, so changes to the map are
reflected in the collection, and vice-versa. If the map is
modified while an iteration over the collection is in progress
(except through the iterator's own remove operation),
the results of the iteration are undefined. The collection
supports element removal, which removes the corresponding
mapping from the map, via the Iterator.remove,
Collection.remove, removeAll,
retainAll and clear operations. It does not
support the add or addAll operations.
Copyright © 2003-2026 The Apache Software Foundation. All rights reserved.