// Path: jrand-core/src/main/java/me/xdrop/jrand/Tuple.java
// public class Tuple<K,V> {
//     K key;
//     V val;
// 
//     public Tuple(K key, V val) {
//         this.key = key;
//         this.val = val;
//     }
// 
//     public K getKey() {
//         return key;
//     }
// 
//     public void setKey(K key) {
//         this.key = key;
//     }
// 
//     public V getVal() {
//         return val;
//     }
// 
//     public void setVal(V val) {
//         this.val = val;
//     }
// 
//     public static <K,V> Tuple<K,V> from(K key, V val) {
//         return new Tuple<>(key,val);
//     }
// }
// 
// Path: jrand-core/src/main/java/me/xdrop/jrand/data/AssetMapper.java
// public interface AssetMapper<T> {
//     T map(String element);
// }
// 
// Path: jrand-core/src/main/java/me/xdrop/jrand/data/IndexMapper.java
// public interface IndexMapper<T> {
// 
//     Tuple<String,T> indexedMap(T element);
// }


import me.xdrop.jrand.Tuple;
import me.xdrop.jrand.data.AssetMapper;
import me.xdrop.jrand.data.IndexMapper;
package me.xdrop.jrand.model.location;


public class CityMapper implements AssetMapper<City>, IndexMapper<City>{


    @Override
    public City map(String element) {
        String[] parts = element.split(",");

        return new City(parts[1], parts[0], parts[2], parts[3]);
    }

    @Override
    public Tuple<String, City> indexedMap(City element) {
// Path: jrand-core/src/main/java/me/xdrop/jrand/Tuple.java
// public class Tuple<K,V> {
//     K key;
//     V val;
// 
//     public Tuple(K key, V val) {
//         this.key = key;
//         this.val = val;
//     }
// 
//     public K getKey() {
//         return key;
//     }
// 
//     public void setKey(K key) {
//         this.key = key;
//     }
// 
//     public V getVal() {
//         return val;
//     }
// 
//     public void setVal(V val) {
//         this.val = val;
//     }
// 
//     public static <K,V> Tuple<K,V> from(K key, V val) {
//         return new Tuple<>(key,val);
//     }
// }
// 
// Path: jrand-core/src/main/java/me/xdrop/jrand/data/AssetMapper.java
// public interface AssetMapper<T> {
//     T map(String element);
// }
// 
// Path: jrand-core/src/main/java/me/xdrop/jrand/data/IndexMapper.java
// public interface IndexMapper<T> {
// 
//     Tuple<String,T> indexedMap(T element);
// }


// Path: jrand-core/src/main/java/me/xdrop/jrand/model/location/CityMapper.java
import me.xdrop.jrand.Tuple;
import me.xdrop.jrand.data.AssetMapper;
import me.xdrop.jrand.data.IndexMapper;

package me.xdrop.jrand.model.location;


public class CityMapper implements AssetMapper<City>, IndexMapper<City>{


    @Override
    public City map(String element) {
        String[] parts = element.split(",");

        return new City(parts[1], parts[0], parts[2], parts[3]);
    }

    @Override
    public Tuple<String, City> indexedMap(City element) {
        return Tuple.from(element.getCountry(), element);