我有这个循环:List<Integer> numbers = new ArrayList<Integer>(); for(int x=0; x<citiesNames.size();x++){ List<Cities> numeroCiudades = citiesRepository.findByCity(citiesNames.get(x)); numbers.add(numeroCiudades.size()); //System.out.println(numeroCiudades.size()); }其中 cityNames 是包含 16584 个元素的字符串列表,而 findByCity 是我传递字符串并在数据库中搜索相应条目的方法。我要做的是搜索每个城市的相应条目,检查条目数,并将条目数添加到整数列表中。但是这个循环太慢了,需要很长时间才能显示结果。我该如何优化呢?
3 回答
郎朗坤
TA贡献1921条经验 获得超9个赞
我不清楚为什么必须在 List 中“打包”所有城市,因为您可以在itiesRepository 中创建一个函数,该函数返回一个包含特定城市条目数的 int。(这会大大提高性能。因此,程序将能够只返回一个简单的 int 而不是整个类的实例化)(假设您可以访问 cityRepository)。
此外,提前设置分配列表容量可能是有意义的。在大型列表中调整大小会导致性能显着下降(在此处阅读有关 ArrayList 工作原理的更多信息)
一只甜甜圈
TA贡献1836条经验 获得超5个赞
要优化此循环,您必须修改 findByCity 以便它可以一次处理所有这些。如果您无法修改 findByCity,您始终可以使用 Streams 的并行性:
int numbers[] = citiesNames.parallelStream() .mapToInt(c -> citiesRepository.findByCity(c).size()) .toArray();
添加回答
举报
0/150
提交
取消