Создание списков на основе некоторых критериев в 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);
}