我在表中有以下数据。我想根据批次ID制作List<String>
对象。相同批次ID的客户将在列表中。批次ID是顺序的,排序的且唯一的。使用以下数据,我将获得3个列表。 Java 7中有效的方法是什么? (我不能使用Java 8)
Customer Batch ID
-------------------------
Alex 1
Brad 1
Erin 1
John 2
Grace 3
Olivia 3
List1 = {Alex,Brad,Erin} List2 = {约翰} List3 = {Grace,Olivia}
答案 0 :(得分:1)
必须成为Java 7吗?这在Java 8中很简单。
假设您的输入数据是一个Person列表,其中批次ID是一个属性*:
Map<Integer, List<Person>> byBatchId = people
.stream()
.collect(groupingBy(Person::getBatchId));
然后您可以按批次ID提取列表。
*如果数据尚未采用该格式,则可以将其转换为该格式:)
在纯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);
}