Skip navigation links

Package com.github.protobufel.multikeymap

Java 8 implementation of the MultiKeyMap.

See: Description

Package com.github.protobufel.multikeymap Description

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();
 
 
Skip navigation links