Создание списков на основе некоторых критериев в Java

У меня есть следующие данные в таблице. И я хочу сделать List<String> объекты на основе идентификатора партии. Клиенты с таким же идентификатором партии будут в списке. Идентификатор партии является последовательным, отсортированным и уникальным. Со следующими данными у меня будет 3 Списка. Каков будет эффективный путь в Java 7? (Я не могу использовать Java 8)

Customer        Batch ID
-------------------------
Alex            1
Brad            1
Erin            1   
John            2
Grace           3
Olivia          3

Список1 = {Алекс, Брэд, Эрин} Список2 = {Джон} Список3 = {Грейс, Оливия}

1 ответ

Это должна быть Java 7? Это просто в Java 8.

Предположим, что ваши входные данные на мгновение представляют собой список Person, где ID пакета - это свойство *:

Map<Integer, List<Person>> byBatchId = people
    .stream()
    .collect(groupingBy(Person::getBatchId));

И тогда вы можете извлечь списки по идентификатору партии.

* если данные еще не в этой форме, вы можете начать с преобразования их в эту форму:)

В чистой Java 7 простым способом было бы создать Map вручную. Это не использует отсортированную последовательную природу, но все же приятно и эффективно. Примечание: здесь будут мутации.

Map<Integer, List<String>> byBatchId = new HashMap<>();
for(Person person : people) {
    // initialise the list if it doesn't already exist
    Integer batchId = person.batchId();
    if(!byBatchId.containsKey(batchId) {
        byBatchId.put(batchId, new ArrayList<>());
    }
    // then it's safe to add to the list
    byBatchId.get(batchId).add(person);
}
Другие вопросы по тегам