アイデアは、各文字列を整数のタプルに変換することです (たとえば、名前を付けましょうNumberInfo
)。つまり、"100.2.0" => { 100, 2, 0 } です。これは、整数表現が比較を実行するのに役立つためです (比較はアイテムを並べ替えます)。
したがって、 を に変換した後、List<String>
をList<NumberInfo>
ソートList<NumberInfo>
できます。
「タプル」:
class NumberInfo {
private int a;
private int b;
private int c;
private NumberInfo(int a, int b, int c) {
this.a = a;
this.b = b;
this.c = c;
}
int getA() {
return a;
}
int getB() {
return b;
}
int getC() {
return c;
}
public static NumberInfo fromString(String s) {
String[] itemComponents = s.split("[.]");
if (itemComponents.length != 3) {
throw new IllegalArgumentException("Three comma delimited components expected");
}
int a = Integer.parseInt(itemComponents[0]);
int b = Integer.parseInt(itemComponents[1]);
int c = Integer.parseInt(itemComponents[2]);
NumberInfo numberInfo = new NumberInfo(a, b, c);
return numberInfo;
}
@Override
public String toString() {
return a + "." + b + "." + c;
}
}
タプルコンパレータ:
class NumberInfoComparator implements Comparator<NumberInfo> {
@Override
public int compare(NumberInfo o1, NumberInfo o2) {
int result = Integer.compare(o1.getA(), o2.getA());
if (result != 0)
return result;
result = Integer.compare(o1.getB(), o2.getB());
if (result != 0) {
return result;
}
result = Integer.compare(o1.getC(), o2.getC());
return result;
}
}
主な方法:
public static void main(String[] args) {
String[] tab = { "100.2.0" , "5.7.4" , "7.6.1" , "5.6.4" };
ArrayList<NumberInfo> numberInfoList = new ArrayList<NumberInfo>();
for (String item : tab) {
NumberInfo numberInfo = NumberInfo.fromString(item);
numberInfoList.add(numberInfo);
}
NumberInfoComparator numberInfoComparator = new NumberInfoComparator();
Collections.sort(numberInfoList, numberInfoComparator);
for (NumberInfo numberInfo : numberInfoList) {
System.out.println(numberInfo);
}
}