Каков наилучший способ иметь двунаправленную структуру, подобную Hashmap от 1 до N в Java - PullRequest
0 голосов
/ 18 мая 2018

У меня есть две сущности, Person и Age.В то время как значения Person являются уникальными, Age может быть одинаковым для нескольких Person.

Если бы я хотел только поиск Age из Person, я бы использовал HashMap.Но я также хочу получить список Person конкретного Age.Решение, которое я могу придумать, заключается в следующем HashMap<String, List<Long>> для обратного поиска.Есть ли структура данных или интерфейс типа карты с поиском O (1) в обоих направлениях, который выполняет работу двух HashMap в одном?Обратите внимание, что я использовал Person и Age в качестве тривиального примера, и что настоящие примеры не хранятся в базе данных, а извлекаются из службы, поэтому я должен обрабатывать их по мере получения.

Обновление:

Я думаю, что Guavas MultiMap может решить эту проблему.Потому что в моем случае и ключ и значение String, так что это будет работать.Просто кажется немного нечистым.

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

если вы используете Java 1.8+, вы можете использовать функцию ".stream ()", например:

public static void main(String[] args ) {

    List<Person> personList = new ArrayList<>();
    //...
    List<Person> listOfPersonsWith28 = 
            personList.stream()
            .filter(person -> person.getMyAge().value == 28)
            .collect(Collectors.toList());
}

class Age{
    public int value;
    //...
}

class Person{
    private Age myAge;

    public Age getMyAge() {
        return myAge;
    }
    public void setMyAge(Age myAge) {
        this.myAge = myAge;
    }

}
0 голосов
/ 18 мая 2018

Это зависит от того, насколько сложным является ваше требование - у меня была похожая ситуация в прошлом, но моя ситуация была немного более сложной, и у меня было 4 или 5 полей, на которые я хотел иметь возможность взглянуть, поэтому я закончилдо этого я использовал базу данных в памяти (я использовал H2, но их немного).Затем я проиндексировал все поля, по которым я хотел найти.Поскольку он находится в памяти, вы получаете очень высокие скорости, и если вы используете JPA и т. Д., Код все еще довольно чистый.Очевидно, что это сложнее, чем просто использование HashMap, но будет лучше масштабироваться, если ваши требования станут более сложными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...