Java 8 implementation of the multi-key map. It behaves like a regular generic Map with the additional ability of getting its values by any combination of partial keys. 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", ",", "the", "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();
// Happy using!
For more see the JavaDoc Documentation.
Happy coding,
David Tesler