将可变列表转换为自定义对象列表

分享于2023年02月22日 coordinates kotlin 问答
【问题标题】:Convert Mutable list to a custom List of object将可变列表转换为自定义对象列表
【发布时间】:2023-02-21 23:45:39
【问题描述】:

我正在尝试将可变列表转换为自定义对象列表以存储纬度和经度。

但是,我不确定转换是否正确

所以 Mutable List 被声明为 val coordinateArray: MutableList<MutableList<Double>> = mutableListOf()

这就是我转换它的方式

    val pointList: MutableList = ArrayList()
    for (i in coordinateArray.indices) {
        val point = Point(i.toDouble(), (i+1).toDouble())
        pointList.add(point)
    }

    val distance = 0.0001
    val bufferedPolygonList: List = AreaBuffer.buffer(pointList, distance)

上面的代码生成一个缓冲多边形坐标列表。

在测试上面的坐标时,坐标是无穷大,这是不正确的。

如果我做错了什么,你能告诉我吗?


【解决方案1】:

我认为您的解决方案的问题在于您正在插入迭代的值,而不是将它们用作索引以从 coordinateArray 列表中获取值。

这是它的实现

public val Collection<*>.indices: IntRange
    get() = 0..size - 1

尝试使用类似上面的代码

val coordinateArray: MutableList> = mutableListOf(
    mutableListOf(1.0, 2.0),
    mutableListOf(2.0, 3.0),
    mutableListOf(3.0, 4.0)
)
val pointList: MutableList = ArrayList()
for (i in coordinateArray.indices) {
    val point = Point(coordinateArray[i][0], coordinateArray[i][1])
    pointList.add(point)
}

另外,请注意,最好使用不可变结构,您还可以使用 map 函数简化代码

val coordinateArray: List> = listOf(
    listOf(1.0, 2.0),
    listOf(2.0, 3.0)
)
val pointList = coordinateArray.map { Point(it[0], it[1]) }
println(pointList)

【讨论】: