根据Java中的某些条件创建列表

时间:2018-08-05 21:19:42

标签: list java-7

我在表中有以下数据。我想根据批次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}

1 个答案:

答案 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);
}