我有ArrayList
定义如下:
List<String> where = new ArrayList<String>();
where.add("1 Kg");
where.add("500 gram");
where.add("5 Kg");
当我显示此列表时,显示的值显示为:
1公斤 500克
5公斤
我希望它显示如下:
500克
1公斤 5公斤
我应该如何排序。
答案 0 :(得分:3)
您需要Comparator
来编写比较逻辑。
请参阅以下实施。
package test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<String> where = new ArrayList<String>();
where.add("5 Kg");
where.add("500 gram");
where.add("1 Kg");
Collections.sort(where, new MassComparator());
for(String mass : where) {
System.out.println(mass);
}
}
public static class MassComparator implements Comparator<String> {
@Override
public int compare(String weight1, String weight2) {
double val1 = Double.parseDouble(weight1.replace("gram", "").replace("Kg", "").trim());
double val2 = Double.parseDouble(weight2.replace("gram", "").replace("Kg", "").trim());
if (weight1.contains("gram")) {
val1 *= .001;
}
if (weight2.contains("gram")) {
val2 *= .001;
}
int result = 0;
if (val1 < val2) {
result = -1;
} else if (val1 > val2) {
result = 1;
}
return result;
}
}
}
<强>输入强>
List<String> where = new ArrayList<String>();
where.add("500 gram");
where.add("2 Kg");
<强>输出强>
500 gram
2 Kg
答案 1 :(得分:1)
如果你真的想要对值的String
表示进行排序,而不是统一数据中的值(例如以克为单位)并按照值的自然顺序对它们进行排序,那么你需要做一些工作。
Comparator<String>
- 请参阅here了解API。在对Collections.sort
(API here)进行排序时,您会在调用List
时注入此内容。 compare
方法中,通过正则表达式解析每个String
中的两个内容:数字(实数或整数,取决于您的数据)和测量单位(可能基于定义的地图)克,千克等的所有变种。)Comparator<String>
!)并将解析后的数字转换为单个单位的值(可能是克等)Integer
s或Double
s等) - 这次使用它们的自然顺序“可选”,处理所有边缘情况:null
或空值,String
不包含数字表示或测量单位,模糊值等。
答案 2 :(得分:0)
将您的值存储为Double,如下所示
List<Double> where = new ArrayList<Double>();
where.add(0.5);
where.add(1);
where.add(5);
您可以在上面的列表中应用排序, 在检索时,如果您的应用程序要求允许,您可以使用0.5公斤而不是500克。
答案 3 :(得分:0)
Mr @ 11thdimension已经提供了一个完美的解决方案。我想如果你愿意,你也可以使用Java 8。基本上相同的想法,但代码较少。
List<String> where = new ArrayList<String>();
where.add("1 Kg");
where.add("500 gram");
where.add("5 Kg");
Collections.sort(where, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
double a = (Double.parseDouble(o1.replace("gram","").replace("Kg","").trim()))*(o1.contains("gram")?0.001:1);
double b = (Double.parseDouble(o2.replace("gram","").replace("Kg","").trim()))*(o2.contains("gram")?0.001:1);
return Double.compare(a,b) ;
}
});
where.stream().forEach(System.out::println);
答案 4 :(得分:-1)
只需使用$.getJSON("https://opendata.rdw.nl/resource/m9d7-ebf2.json",{kenteken: kenteken},function(data, status){
alert("Merk: " + data[0].merk + " Handelsbenaming: " + data[0]. handelsbenaming + " Status: " + status);});
});
和index
周期,
for