You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中从LatLng列表获取LatLngBounds的最优方法

优化LatLng列表生成LatLngBounds的实现

你的当前实现是可行的,但确实有更简洁高效的优化方式,尤其是利用Google Maps SDK提供的LatLngBounds.Builder类——它专门用来构建边界框,不管是代码可读性还是性能都会更出色。

推荐方案1:使用LatLngBounds.Builder(最简洁直观)

val latLngs: List<LatLng> = placeList.map { LatLng(it.placeLat, it.placeLon) }
val latLngBounds = if (latLngs.isEmpty()) {
    // 处理空列表的默认边界
    LatLngBounds(LatLng(DEFAULT_LAT, DEFAULT_LNG), LatLng(DEFAULT_LAT, DEFAULT_LNG))
} else {
    val builder = LatLngBounds.Builder()
    latLngs.forEach { builder.include(it) }
    builder.build()
}

进一步优化:减少中间列表创建

如果不需要保留latLngs这个中间列表,可以直接遍历placeList构建边界,省去一次列表转换的开销(尤其适合数据量较大的场景):

val latLngBounds = if (placeList.isEmpty()) {
    LatLngBounds(LatLng(DEFAULT_LAT, DEFAULT_LNG), LatLng(DEFAULT_LAT, DEFAULT_LNG))
} else {
    val builder = LatLngBounds.Builder()
    placeList.forEach { builder.include(LatLng(it.placeLat, it.placeLon)) }
    builder.build()
}

为什么这个方案更优?

  • 性能提升明显:你的原代码调用了4次minBy/maxBy,每次都会完整遍历列表,总共4次遍历;而Builder的方式只需要遍历1次,内部自动维护最小/最大经纬度的计算,效率提升显著。
  • 代码可读性更强:include方法语义明确,一眼就能看出是在将所有点位纳入边界计算,不需要手动处理min/max的逻辑,减少出错概率。
  • 边界情况处理更直观:空列表的分支逻辑清晰,避免了原代码中多次使用Elvis运算符的繁琐。

内容的提问来源于stack exchange,提问作者Elye

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:42:55