在具有多个位置地址组件的列表上迭代-Kotlin



我收到来自特定地点的地点详细信息(来自Google Maps SDK Android(。因此,此地点具有不同的地点详细信息。

输出如下:

Place found: AddressComponents{asList=[AddressComponent{name=58, shortName=58, types=[street_number]}, AddressComponent{name=Schwertstraße, shortName=Schwertstraße, types=[route]}, AddressComponent{name=Sindelfingen, shortName=Sindelfingen, types=[locality, political]}, AddressComponent{name=Böblingen, shortName=BB, types=[administrative_area_level_3, political]}, AddressComponent{name=Stuttgart, shortName=Süd, types=[administrative_area_level_2, political]}, **AddressComponent{name=Baden-Württemberg, shortName=BW, types=[administrative_area_level_1, political]}**, AddressComponent{name=Deutschland, shortName=DE, types=[country, political]}, AddressComponent{name=71065, shortName=71065, types=[postal_code]}]}

我正在查找typ=administrative_area_level_1和level_2的具体信息。但是我找不到迭代的方法。

有了Kotlin,我能够艰难地获取价值,但这不是解决方案。对象寻址组件在对GooglePlaceneneneba API的新请求中更改它们的位置。甚至有些地方提供的信息也很少。

System.out.println(place.addressComponents?.asList()?.get(5)?.name)
System.out.println(place.addressComponents?.asList()?.get(5)?.shortName)

结果:

Baden-Württemberg
BW

那么,我如何在不硬编码位置、忽略顺序并找到我要查找的特定信息的情况下访问PlaceResult呢?

您正在寻找的功能是集合过滤。假设您的列表名为place,则以下内容将返回两个匹配的行:

val desiredTypes = setOf("administrative_area_level_1",
"administrative_area_level_2")  
println(place.filter { it.types.any(desiredTypes::contains) } )
// Prints: [name=Stuttgart, shortName=Süd, types=[administrative_area_level_2, political], name=Baden--Württemberg, shortName=BW, types=[administrative_area_level_1, political]]

filter函数返回任何匹配的元素it是所考虑元素的(默认(名称。any函数返回每个元素的types子元素是否包含desiredTypesset中的任何项。

最新更新