根据 Java 中的某些条件创建列表
Creating Lists based on some criteria in Java
我在 table 中有以下数据。我想根据批次 ID 制作 List<String>
个对象。相同批次 ID 的客户将在一个列表中。批次 ID 是连续的、排序的和唯一的。使用以下数据,我将有 3 个列表。 Java 7 中有效的方法是什么? (我不能用Java8)
Customer Batch ID
-------------------------
Alex 1
Brad 1
Erin 1
John 2
Grace 3
Olivia 3
列表 1 = {亚历克斯、布拉德、艾琳}
List2 = {约翰}
List3 = {格蕾丝,奥利维亚}
是否是Java7?这在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);
}
我在 table 中有以下数据。我想根据批次 ID 制作 List<String>
个对象。相同批次 ID 的客户将在一个列表中。批次 ID 是连续的、排序的和唯一的。使用以下数据,我将有 3 个列表。 Java 7 中有效的方法是什么? (我不能用Java8)
Customer Batch ID
-------------------------
Alex 1
Brad 1
Erin 1
John 2
Grace 3
Olivia 3
列表 1 = {亚历克斯、布拉德、艾琳} List2 = {约翰} List3 = {格蕾丝,奥利维亚}
是否是Java7?这在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);
}