根据 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);
}