gpt4 book ai didi

数组中项目的 Java 计数(类似于 SQL 聚合函数)

转载 作者:行者123 更新时间:2023-11-29 08:19:12 24 4
gpt4 key购买 nike

我正在连接到一个非常不灵活的套接字 API。它将返回如下行:

NAME, CITY, STATE, JOB, MONTH

但是会有重复,因为它没有做任何聚合。我需要计算重复行(这在 SQL 中非常容易,但据我所知,在 Java 中则不然)。

示例源数据:

NAME,     CITY, STATE, JOB,         MONTH
John Doe, Denver, CO, INSTALLATION, 090301
John Doe, Denver, CO, INSTALLATION, 090301
John Doe, Denver, CO, INSTALLATION, 090301
Jane Doe, Phoenix, AZ, SUPPORT, 090301

目的:

    NAME,    CITY, STATE,          JOB,  MONTH, COUNT
John Doe, Denver, CO, INSTALLATION, 090301, 3
Jane Doe, Phoenix, AZ, SUPPORT, 090301, 1

我可以轻松地为大约 100,000 个返回行执行此操作,但我一个月要处理大约 6000 万个。有什么想法吗?

编辑:不幸的是,返回的行未排序...也没有通过 API 对它们进行排序的选项。我得到了一大堆需要聚合的东西。现在我使用一个 ArrayList 并执行 indexOf(new row) 来查找该项目是否已经存在,但是它变得越慢,行越多。

编辑:为澄清起见,这只需要每月在月底运行一次。感谢大家的回复

最佳答案

您可以使用 HashSet 来存储具有相同内容的前一行。 (假设您的 Row 对象具有适当的 .hashValue() 和 .equals() 方法。

也许是这样的:

Set<Row> previousRows = new HashSet<Row>();
List<Row> rowsInOrder = new LinkedList<Row>();

然后在使用中(进一步假设您有一个用于 Row 类的 incrementCount() 方法):

Row newRow = getNextRow();
if(!previousRows.contains(newRow)){
previousRows.put(newRow);
rowsInOrder.add(newRow);
}
previousRows.get(newRow).incrementCount();

如果您不关心行的进入顺序,您可以去掉 List 而只使用 Set。

关于数组中项目的 Java 计数(类似于 SQL 聚合函数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1691878/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com