0

配列を正しい順序でソートしようとしました。配列の 1 つのフィールドに3 つの変数 (1 int、 1 String、 1 ) を格納しました。floatネイティブの並べ替え方法を使用しようとしましたが、出力が正しい方法で並べ替えられません。

[1 ,Agavendicksaft  ,0.180
, 1 ,Agavendicksaft  ,0.284
, 100 ,Röstzwiebel ,0.057
, 103 ,Salz fein ,6.220
, 103 ,Salz fein ,6.452
, 104 ,Salz grob ,0.490
, 114 ,Sesam ,0.735
, 114 ,Sesam ,1.742
, 115 ,Soja Granulat ,43.788
, 116 ,Sonnenblumenkerne ,0.267
, 116 ,Sonnenblumenkerne ,3.636
, 12 ,BAS hell ,0.975
, 12 ,BAS hell ,6.996
, 139 ,Vanille Aroma ,0.068
, 140 ,Weizenmehl Type W1600 ,1.163
, 140 ,Weizenmehl Type W1600 ,1.927
, 141 ,Weizenmehl Type W700 ,138.127
, 141 ,Weizenmehl Type W700 ,45.158
, 142 ,Walnüsse ,0.228
, 144 ,Wiechert Glutenfei ,1.160
, 145 ,Wienerwurst Stange ,0.100
, 150 ,Zitronen Aroma ,0.068
, 151 ,Zucker Normalkristall ,1.039
, 153 ,Wasser ,167.202
, 21 ,Dinkel Flocken ,0.347
, 24 ,Eier ganz ,0.453
, 26 ,Eigelb ProOvo ,0.365
, 29 ,Fenchel ganz ,0.105
, 36 ,Hafer ganz ,3.078
, 47 ,Hirse ganz ,0.133
, 49 ,Honig ,0.186]

だから私は2つの質問があります:

  1. どうすれば配列を正しくソートできますか?
  2. 複数のエントリを 1 つのエントリに結合するにはどうすればよいですか? fe not 140, 1.163 140, 1.927 => 140, 3,09 (配列は 3 つの sql-result-arrays の組み合わせであるため、コードの前半でそれを行うことはできません)

これが私のコードです:

s = Results2String(resultSet);

splitResult = s.split("/");
System.out.println(s);

s = null;
s = Results2String(resultSet2);
splitResult2 = s.split("/");
System.out.println(s);

s = null;
s = Results2String(resultSet3);
splitResult3 = s.split("/");
System.out.println(s);

System.out.println(splitResult3[0]);

preResult = new String[splitResult.length + splitResult2.length];

System.arraycopy(splitResult, 0, preResult, 0, splitResult.length);
System.arraycopy(splitResult2, 0, preResult, splitResult.length, splitResult2.length);
System.out.println(Arrays.toString(preResult));

result = new String[splitResult.length + splitResult2.length + splitResult3.length];
System.arraycopy(preResult, 0, result, 0, preResult.length);
System.arraycopy(splitResult3, 0, result, preResult.length, splitResult3.length);

Arrays.sort(result);
System.out.println(Arrays.toString(result));
4

3 に答える 3

8

int、と が 1 つずつ一緒Stringfloat属しているとします。

したがって、それらを1つのクラスに入れて実装する必要がありますComparableドキュメント):

public class Food implements Comparable<Food> {
    private int id;
    private String name;
    private float score; // or maybe kcal... ?

    public Food(int id, String name, float score) {
        this.id = id;
        this.name = name;
        this.score = score;
    }

    @Override
    public int compareTo(Food other) {
        return id - other.getId();

        // use the following if you want to sort by name instead
        // return name.compareTo(other.getName());
    }

    public String getId() {
        return id;
    }

    public String getName() {
        return name;
    }
}

次に、sの配列をソートできますFood....


使い方

あなたresultSetの s が何であるか (そしてなぜ 3 つあるのか) はまだわかりませんが、データベース クエリからの ResultSets であると想定しています。さらに、組み合わせは実際にはデータベース内の行であると想定してidいますnamescore

次に、これらResultSetの s を調べて、各行の値をFoodオブジェクトに入れることができます。

 ResultSet resultSet; // filled somewhere else
 List<Food> food = new ArrayList<Food>();

 while (resultSet.next()) {
     int id = resultSet.getInt(0); // assuming the ids are in the first column
     String name = resultSet.getString(1); // assuming the names are in the second column
     float score = resultSet.getFloat(2); // assuming the scores are in the third column

     food.add(new Food(id, name, score));
 }

 Collections.sort(food);

これが役立つことを願っています...

ただし、resultSets が実際にデータベース クエリからの ResultSet である場合は、おそらく SQL クエリの値をORDER BY...で並べ替える必要があります。

于 2013-08-02T14:03:17.230 に答える