Javaでは、各エントリの次のようにフォーマットされた文字列の配列リストがあります
12、バニラグラノーラバー、91。
各文字列の最初の数字の昇順でリストを並べ替えるにはどうすればよいですか? collections.sort() はこれを行うことができますか?
collections.sort() はこれを行うことができますか?
Comparator
はい。ただし、主要な値を抽出して適切に比較するには、カスタムが必要です。
これはコンセプトの非常に基本的な例です...
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class CustomSorter {
public static void main(String[] args) {
List<String> values = new ArrayList<>(25);
values.add("12,Vanilla granola bar,91");
values.add("1,Vanilla granola bar,91");
values.add("50,Vanilla granola bar,91");
values.add("25,Vanilla granola bar,91");
values.add("13,Vanilla granola bar,91");
dump(values);
Collections.sort(values, new SplitComparator());
dump(values);
}
protected static void dump(List<String> values) {
System.out.println(values);
}
public static class SplitComparator implements Comparator<String> {
@Override
public int compare(String o1, String o2) {
int i1 = getIndex(o1);
int i2 = getIndex(o2);
return i1 - i2;
}
protected int getIndex(String o1) {
return Integer.parseInt(o1.split(",")[0]);
}
}
}
面白くないほどうまくいかないことがたくさんあることに注意してください。String
比較する のいずれかが の要件を実際に満たしているかどうかを判断するためのチェックは行っていComparator
ません。たとえば、最初の要素が数値ではない場合も処理していません。
より良い解決策は、String
値を POJO にラップするかinterface
、適切なゲッターを提供することです。これにより、特定のタイプのクラスに制限できるためComparator
、より安全になります。