/multiindex

A Java container with dynamic indexes

Primary LanguageJavaMIT LicenseMIT

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

  • Maven - Dependency Management
  • Hamcrest - Expressive matchers for JUnit
  • Guava - Generic tools

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