管理Java列表对象并对其进行迭代

时间:2019-03-28 18:14:42

标签: java collections hashmap

我有一个列表,它是一个如下所示的java对象。

public class TaxIdentifier {
public String id;
public String gender;
public String childId; 
public String grade,
public String isProcessed;
////...///

getters and setters

///....///
}

Records in DB looks like below,
id   gender childId grader isProcessed
11      M     111       3       Y
12      M     121       4       Y
11      M     131       2       Y
13      M     141       5       Y
14      M     151       1       Y
15      M     161       6       Y   


List<TaxIdentifier> taxIdentifierList = new ArrayList<TaxIdentifier>();

for (TaxIdentifier taxIdentifier : taxIdentifierList) {             


}

当我处理循环并获得id = 11时,我必须检查是否有id = 11的其他记录并一起处理它们并执行DB操作,然后在这种情况下取​​下一条记录说12并查看如果还有其他ID为12的记录,依此类推。

一个选择是我获取ID并查询数据库以返回所有ID = 11,依此类推。 但这与数据库之间来回太多。

在Java中执行相同操作的最佳方法是什么?请指教。

2 个答案:

答案 0 :(得分:1)

如果您仍然需要处理相应数据库表中的所有记录,则应在一次数据库往返中检索所有记录。

此后,您可以收集字典数据结构中的所有TaxIdentifier记录,并以所需的任何方式进行处理。

简短示例如下:

Map<String, List<TaxIdentifier>> result = repositoty.findAll().stream().collect(Collectors.groupingBy(TaxIdentifier::getId));

这里所有TaxIdentifier记录都按TaxIdentifier的ID分组(所有ID等于“ 11”的记录)可以通过以下方式检索和处理:

List<TaxIdentifier> taxIdentifiersWithId11 = result.get("11");

答案 1 :(得分:0)

我会利用您的数据库的功能。查询时,应按ID升序对查询进行排序。不知道您正在使用哪个数据库,但我会这样做:

SELECT * FROM MY_DATABASE WHERE IS_PROCESSED = 'N' ORDER BY ID ASC; 

这需要将其从应用程序分类到数据库上的负担。然后,您的查询将返回ID最低的未处理记录。然后按顺序依次处理它们。