Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 按正确顺序对字符串数组排序_Java_Sorting - Fatal编程技术网

Java 按正确顺序对字符串数组排序

Java 按正确顺序对字符串数组排序,java,sorting,Java,Sorting,我已尝试按正确的顺序对数组排序。我在数组的一个字段中存储了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

我已尝试按正确的顺序对数组排序。我在数组的一个字段中存储了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]
所以我有两个问题:

如何对数组进行正确排序? 如何将多个条目合并到一个entrie?f、 e.not 140,1.163 140,1.927=>140,3,09我不能在前面的代码中这样做,因为数组是3个sql结果数组的组合 这是我的密码:

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));
我假设每个int、String和float中有一个属于一起

因此,您应该将它们放在一个类中并实现:

我希望这有助于


但是,如果您的结果集实际上是数据库查询的结果集,那么您可能应该按照顺序对SQL查询中的值进行排序…

您需要编写一个comparator方法并使用Collections.sortList,comparator创建一个具有这三个属性的类

public class Example{
    private int field1;
    private String field2;
    private double field3;
    .....
}

使用此类对象填充数组,然后使用比较字符串的此类比较器对数组进行排序。

显示您的代码,而不是数组的内容。正确的排序是什么?当前,它似乎是根据每个入口中的第一个数字按字典顺序排序的。这应该是一个二维数组或一维数组,其中包含您定义正确的类的对象:1,2,3,4,5,…60,70,80正是这样。使用类对值进行分组,而不是使用包含所有值的数组。@PhilippSander由于该类已经实现了Comparator,OP只需使用ArraySort即可,即无需更改代码。在比较数字时,只需使用return id-other.id;而不是那么长的if/elseif/else结构。但是他应该如何在代码中使用这个类呢?您应该如何设置字段的值?考虑到OP可能比您所使用的技能要低,结果集合中所有的ID ID得分都在这个组合中,而不是结果集ID、结果集名称、结果集分数。
 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);
public class Example{
    private int field1;
    private String field2;
    private double field3;
    .....
}