Multi-Index-Container
A container class with dynamic indexes. Use this class instead of combining eg. an ArrayList (for iteration in defined order) with a HashMap (for quick lookup via some key).
Getting started
Create an instance of MultiIndexContainer and create the indexes you require. Then, put and retrieve data via any of those indexes.
MultiIndexContainer<Employee> container = MultiIndexContainer.create();
SequentialIndex<Employee> bySequence = container.createSequentialIndex();
UniqueIndex<Integer, Employee> byId = container.createHashedUniqueIndex(e -> e.getId());
bySequence.add(new Employee("Jones", 1, "London"));
bySequence.add(new Employee("Miller", 2, "New York"));
bySequence.add(new Employee("Smith", 3, "Berlin"));
bySequence.add(new Employee("Miller", 4, "Bournemouth"));
[...]
boolean wasAdded = bySequence.add(new Employee("Jones", 2, "Austin"));
Assert.isFalse(wasAdded, "Adding this employee violates the uniqueness constraint of byId index");
Optional<Employee> e = byId.getOptional(3);
if (e.isPresent())
...
Prerequisites
This software requires Java 8 and Guava.
Installing
To add a dependency using Maven, use the following:
<dependency>
<groupId>com.github.mawillers</groupId>
<artifactId>multiindex</artifactId>
<version>1.0.0</version>
</dependency>
Running the tests
Run mvn test
for compiling the code and running all unit tests.
Built with
Versioning
We use SemVer for versioning.
Authors
- Martin Willers - Design and implementation
License
This project is licensed under the MIT License - see the LICENSE.md file for details
Acknowledgments
- The Boost Multi-index Containers Library for C++ gave the idea for creating this package.