Ordenando um SortedMap pelo atributo do objeto [RESOLVIDO]

Boa tarde colegas programadores de plantão. Estou desenvolvendo um aplicativo que cria de um formúlário através das informações contidas em um arquivo tabulato.txt. Consegui desenvolver toda a rotina de criação do formúlario, agora preciso ordená-lo, de acordo com o atributo “geopólitico”(bairros). Segue abaixo o código:

CLASSE DE CRIAÇÃO DO MAP:

package classes.repository;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;
import classes.model.Clientes;
import classes.model.Comodatos;
import classes.model.Zonas;

public class Tables {
	public SortedMap<String, Clientes> clientes = new TreeMap<>();
	public List<Zonas> zonas = new ArrayList<>();
	public Map<String, Comodatos> comodatos = new LinkedHashMap<>();

	public void tables() {
		try {
			File file = new File("table.txt");
			FileReader fReader = new FileReader(file);
			BufferedReader bReader = new BufferedReader(fReader);
			String leitor = bReader.readLine();
			while ((leitor = bReader.readLine()) != null) {
				String[] leitorSplit = leitor.split("\t");
				clientes.put(leitorSplit[0], new Clientes(leitorSplit)); // leitorSplit[0] == cód do cliente não pode se repetir, por isso utilizei o Map
				comodatos.put(leitorSplit[5], (new Comodatos(leitorSplit)));
			}
			File file = new File("zonasbairros.txt");
			FileReader fReader = new FileReader(file);
			BufferedReader bReader = new BufferedReader(fReader);
			String leitor;
			while ((leitor = bReader.readLine()) != null) {
				String[] leitorSplit = leitor.split("\t");
				zonas.add(new Zonas(leitorSplit));
			}
			bReader.close();
		} catch (IOException e) {
			e.getMessage();
		}
	}
}

Implementei um comparable<Clientes> na classe objeto para ver se funcionava, mas não deu certo:

        package classes.model;
        public class Clientes implements Comparable<Clientes> {

	private String cod, fantasia, razaoSocial, endereco, geopolitico, documento, codproduto, descricao, qtd;
	private String[] linha;

	public Clientes() {
	}

	public Clientes(String[] linha) {
		this.cod = linha[0];
		this.fantasia = linha[1];
		this.razaoSocial = linha[2];
		this.endereco = linha[3];
		this.geopolitico = linha[4];
	}


	public String getCod() {
		return cod;
	}

	public void setCod(String cod) {
		this.cod = cod;
	}

	// Getters...Setters..

	@Override
	public int compareTo(Clientes o) {
		return geopolitico.compareTo(o.geopolitico);
	}
}

Conseguiria facilmente organizar com o Collections.sort se utiliza-se uma List, entretanto os dados do arquivo.txt se repetem e por isso a escolha do Map. Varias cabeças pensam melhor que uma. Alguma luz?? abraço!

Resolvi o problema criando uma List a partir do Sortedmap. Com isso, consegui organizar através dos atributos com o Collections.sort sem problemas.

Dica: Quando houver mais de um atributo no objeto, use uma enumeração para criar métodos de ordenação:

    public enum OrdenarClientes implements Comparator<Clientes> {
PorGeopolitico() {
	public int compare(Clientes one, Clientes other) {
		return one.getGeopolitico().compareTo(other.getGeopolitico());
	}
},

PorZonaGeo() {
public int compare(Clientes one, Clientes other) {
		if (one.getZona() != other.getZona()) {
			return one.getZona().compareTo(other.getZona());
		} else if (one.getZona() == other.getZona()) { 
			return one.getGeopolitico().compareTo(other.getGeopolitico());
		} else {
			return one.getGeopolitico().compareTo(other.getGeopolitico());
		}
	}
},

PorRazaoSocial() {

	public int compare(Clientes one, Clientes other) {
		return one.getRazaoSocial().compareTo(other.getRazaoSocial());
	}
},
PorCodigo() {

	public int compare(Clientes one, Clientes other) {
		return one.getCod().compareTo(other.getCod());
	}

},

PorQtd() {

	public int compare(Clientes one, Clientes other) {
		return one.getQtd().compareTo(other.getQtd());
	}

},

PorDescricao() {

	public int compare(Clientes one, Clientes other) {
		return one.getDescricao().compareTo(other.getDescricao());
	}

},

PorCodProduto() {

	public int compare(Clientes one, Clientes other) {
		return one.getCodproduto().compareTo(other.getCodproduto());
	}

},

PorEndereco() {

	public int compare(Clientes one, Clientes other) {
		return one.getEndereco().compareTo(other.getEndereco());
	}

},

PorFantasia() {

	public int compare(Clientes one, Clientes other) {
		return one.getFantasia().compareTo(other.getFantasia());
	}
};

Depois é so: Collection.sort(List, OrdenarClientes.PorFantasia) por exemplo