是否有更简洁的方法将Map [A​​ny,Any]转换为Map [String,String]?

时间:2015-05-29 15:38:53

标签: scala collections

考虑一下代码:

var cities = [
    ['zürich', 47.368650, 8.539183],
    ['City2', 21.568650, 2.439183],
    ['City3', 41.568650, 4.439183]
];

var dist = calculateDistance(cities[0][2], cities[0][3], cities[1][4], cities[1][5], 'K');
alert(dist);

function calculateDistance(lat1, lon1, lat2, lon2, unit) {
    var radlat1 = Math.PI * lat1 / 180
    var radlat2 = Math.PI * lat2 / 180
    var radlon1 = Math.PI * lon1 / 180
    var radlon2 = Math.PI * lon2 / 180
    var theta = lon1 - lon2
    var radtheta = Math.PI * theta / 180
    var dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
    dist = Math.acos(dist)
    dist = dist * 180 / Math.PI
    dist = dist * 60 * 1.1515
    if (unit == "K") {
        dist = dist * 1.609344
    }
    if (unit == "N") {
        dist = dist * 0.8684
    }
    return dist + unit
}

是否有更简洁的方法可以在不使用地图构建器的情况下将def convertMape(map:Map[Any,Any]): Map[String,String] = { map.foldLeft(Map.newBuilder[String,String]) {(builder,kv)=> builder += ((kv._1.toString, kv._2.toString)) }.result() } 转换为Map[Any,Any]

2 个答案:

答案 0 :(得分:2)

怎么样?
map.map{case (k,v) => k.toString -> v.toString}

答案 1 :(得分:1)

使用for comprehesion,

for ( (k,v) <- map) yield k.toString -> v.toString