Amigo, segue um exemplo:
`import java.util.*;
class Setor {
public Setor(String codigoSetor) {
this.codigoSetor = codigoSetor;
}
public Setor() {}
public String codigoSetor;
public String getCodigoSetor() {
return this.codigoSetor;
}
public void setCodigoSetor(String codigoSetor) {
this.codigoSetor = codigoSetor;
}
public String toString() {
return getCodigoSetor();
}
}
class OrderSetor implements Comparator {
public static final String NUMBER_PATTERN = “(\-?\d+\.\d+)|(\-?\.\d+)|(\-?\d+)”;
public int compare(Setor setor, Setor outroSetor) {
String str1 = setor.getCodigoSetor();
String str2 = outroSetor.getCodigoSetor();
if(str1 == null || str2 == null) {
return 0;
}
List split1 = split(str1);
List split2 = split(str2);
int diff = 0;
for(int i = 0; diff == 0 && i < split1.size() && i < split2.size(); i++) {
String token1 = split1.get(i);
String token2 = split2.get(i);
if(token1.matches(NUMBER_PATTERN) && token2.matches(NUMBER_PATTERN)) {
diff = (int) Math.signum(Double.parseDouble(token1) - Double.parseDouble(token2));
} else {
diff = token1.compareToIgnoreCase(token2);
}
}
if(diff != 0) {
return diff;
} else {
return split1.size() - split2.size();
}
}
private List<String> split(String s) {
List<String> list = new ArrayList<String>();
Scanner scanner = new Scanner(s);
int index = 0;
String num = null;
while((num = scanner.findInLine(NUMBER_PATTERN)) != null) {
int indexOfNumber = s.indexOf(num, index);
if(indexOfNumber > index) {
list.add(s.substring(index, indexOfNumber));
}
list.add(num);
index = indexOfNumber + num.length();
}
if(index < s.length()) {
list.add(s.substring(index));
}
return list;
}
}
public class Test
{
public static void main(String[] args)
{
List<Setor> setores = new ArrayList<Setor>();
setores.add(new Setor("104R2"));
setores.add(new Setor("92P1"));
setores.add(new Setor("92P3"));
setores.add(new Setor("133"));
setores.add(new Setor("104R1"));
setores.add(new Setor("92P2"));
setores.add(new Setor("MC"));
setores.add(new Setor("MC1"));
setores.add(new Setor("MC10"));
System.out.println(setores);
Collections.sort(setores, new OrderSetor());
System.out.println(setores);
}
}
`
Saída:
Antes
[104R2, 92P1, 92P3, 133, 104R1, 92P2, MC, MC1, MC10]
Depois
[92P1, 92P2, 92P3, 104R1, 104R2, 133, MC, MC1, MC10]