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).
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())
...
This software requires Java 8 and Guava.
To add a dependency using Maven, use the following:
<dependency>
<groupId>com.github.mawillers</groupId>
<artifactId>multiindex</artifactId>
<version>1.0.0</version>
</dependency>
Run mvn test
for compiling the code and running all unit tests.
We use SemVer for versioning.
- Martin Willers - Design and implementation
This project is licensed under the MIT License - see the LICENSE.md file for details
- The Boost Multi-index Containers Library for C++ gave the idea for creating this package.