3

タイプ String[] の配列リストがあります。String[0] で int として注文したい。私はこれを持っています:

Collections.sort(listitems, new Comparator<String[]>() {
 @Override
 public int compare(String[] lhs, String[] rhs) {
  return lhs[0].compareToIgnoreCase(rhs[0]);
 }
});

しかし、この順序は次のようになります:
10
11
12
2
20
21
3
4
5
と を に変換しようとしましlhs[0]rhs[0]int、型には比較の種類がなく、どの型を返す必要があるintのか​​ わかりませんint

4

4 に答える 4

10

からの結果compareは次のようになります。

  • 最初の引数が 2 番目の引数よりも論理的に「小さい」場合は負
  • 最初の引数が 2 番目の引数よりも論理的に「大きい」場合は正
  • 最初の引数が 2 番目の引数と論理的に等しい場合はゼロ

したがって、各配列の最初の文字列が整数として解析可能であることが確実な場合は、次を使用します。

@Override
public int compare(String[] lhs, String[] rhs) {
    int leftInt = Integer.parseInt(lhs[0]);
    int rightInt = Integer.parseInt(rhs[0]);
    return leftInt < rightInt ? -1
        : leftInt > rightInt ? 1
        : 0;
}

Java 1.7 には便利なInteger.compare方法がありますが、それは利用できないと思います。使用することはできますInteger.compareToが、モバイル デバイスで必要以上に多くのゴミが作成される可能性があります...

これは、leftIntrightIntが非常に大きい場合、または負の可能性がある場合でも機能することに注意してください。ある値を別の値から減算するだけのソリューションでは、減算がオーバーフローしないと想定されます。

于 2012-04-10T10:58:38.033 に答える
2

配列の内容が整数の文字列表現であると仮定すると、これでうまくいくと思います。

Collections.sort(listitems, new Comparator<String[]>() {
 @Override
 public int compare(String[] lhs, String[] rhs) {
  return Integer.valueOf(lhs[0]).compareTo(Integer.valueOf(rhs[0]));
 }
});
于 2012-04-10T10:59:34.233 に答える
1

比較は、番号のアルファベット順に基づいています。それらを数値的に比較するには:

Integer.parseInt(lhs[0]) - Integer.parseInt(rhs[0]);
于 2012-04-10T10:56:20.433 に答える
0

Integer.parseInt(1hs [0])-Integer.parseInt(rhs [0]);を試すことができます。

また

int compareTo(Integer anotherInteger)sytnax

また

デコード(文字列nm)

于 2012-04-10T11:02:28.283 に答える