MultiKeyMap
.See: Description
Interface | Description |
---|---|
MultiKeyMap<T,K extends java.lang.Iterable<T>,V> |
Represents a generic Map of composite keys plus the methods to query it by any combination of
sub-keys.
|
Class | Description |
---|---|
Collectors |
The utility class providing the MultiKeyMap and multiple sets' intersection related collectors.
|
MultiKeyMaps |
Provides the factory methods of the generic MultiKeyMap implementations.
|
Java 8 implementation of the MultiKeyMap
. It behaves like a
regular generic Map with the additional ability of getting its values by any combination of
partial keys.
MultiKeyMaps
's static factory methods are main entries to this
package functionality. Use newMultiKeyMap()
to
get an instance of the default implementation. In addition, one can create a new
MultiKeyMap
based on the data copied from the provided map
using of(java.util.Map)
method.
For example, one can add any value with the complex key {"Hello", "the", "wonderful", "World!"}, and then query by any sequence of subkeys like {"wonderful", "Hello"}. In addition, you can query by a mixture of some any-position-sub-keys and positional sub-keys, as in the following example:
MultiKeyMap<String, Iterable<String>, String> map = MultiKeyMaps.newMultiKeyMap();
// add a record
map.put(Arrays.asList("Hello", ",", "wonderful", "world"), "You found me!");
// or copy some data from the compatible Map
Map<Iterable<String>, String> dict = new HashMap<>();
dict.put(Arrays.asList("okay", "I", "am", "here"), "or there!");
dict.put(Arrays.asList("okay", "I", "am", "not", "here"), "for sure!");
// adding the data from another Map or MultiKeyMap
map.putAll(dict);
// MultiKeyMap interface extends Map, and also adds get{FullKeys|Values|Entries}ByPartialKey
// methods of its own
String exactMatch = map.get(Arrays.asList("okay", "I", "am", "here"));
if (exactMatch != null) {
System.out.println(String.format("This is a regular Map method, looking for exact full key. Let's see the actual value: %s", exactMatch));
}
// lets look by partial key anywhere within the full key (any sequence in any order of some
// sub-keys of the original full key we're looking for)
// should be 1 record with value = 'for sure!'. Let's see the actual one:
map.getValuesByPartialKey(Arrays.asList("not", "I")).forEach(System.out::println);
// lets look by partial key, wherein some sub-keys are looked at the particular 0-based
// positions ( >= 0), and others anywhere ( < 0)
// should be 1 record with value = 'or there!'. Let's see the actual one:
map.getValuesByPartialKey(Arrays.asList("here", "I", "am"), Arrays.asList(3, -1, -1))
.forEach(System.out::println);
map.clear();