我有一个String数组,其中包含以下条目:
Array[0] = "70% Marc"
Array[1] = "50% Marc"
Array[2] = "100% Marc"
Array[3] = "20% Marc"
我想将这个数组降序排序。
当我使用Arrays.sort(Array)
时,它会对它进行降序排序,但100% Marc
位于底部(因为它只查看第一个字符进行排序)。我希望它像这样排序:
"100% Marc"
"70% Marc"
"50% Marc"
"20% Marc"
我该怎么做?
答案 0 :(得分:4)
编写自己的CustomStringComparator
并将其与排序方法一起使用。
public class CustomStringComparator implements Comparator<String>{
@Override
public int compare(String str1, String str2) {
// extract numeric portion out of the string and convert them to int
// and compare them, roughly something like this
int num1 = Integer.parseInt(str1.substring(0, str1.indexOf("%") - 1));
int num2 = Integer.parseInt(str2.substring(0, str2.indexOf("%") - 1));
return num1 - num2;
}
}
答案 1 :(得分:1)
您必须使用自定义Comparator。基本上在您的方法compare()
中,您将编写逻辑来订购两个String
s。
答案 2 :(得分:1)
您需要一个自定义比较器:
import java.util.Comparator;
public class CustomComparator implements Comparator<String>{
@Override
public int compare(String firstString, String secondString) {
int number1 = Integer.parseInt(firstString.substring(0, firstString.indexOf('%') - 1);
int number2 = Integer.parseInt(secondString.substring(0, secondString.indexOf('%') - 1);
return number1.compareTo(number2);
}
}
使用此比较器,如下所示:
List<String> entries = new ArrayList<String>();
entries.add("70% Marc");
entries.add("50% Marc");
entries.add("100% Marc");
entries.add("20% Marc");
CustomComparator comparator = new CustomComparator();
Collections.sort(entries, comparator);
答案 3 :(得分:0)
您需要通过删除百分号来实现处理比较的自定义Comparator<String>
:
public int compare(String str1, String str2) {
Integer number1 = Integer.parseInt(str1.substring(0, str1.length - 1));
Integer number2 = Integer.parseInt(str1.substring(0, str2.length - 1));
return number1.compareTo(number2);
// or use primitives, and then: return (x < y) ? -1 : ((x == y) ? 0 : 1);
// but that's harder to read
}
比较本身可以通过使用Integer
包装器,我粘贴的代码(从包装器中获取)或guava的Ints.compare(int1, int2)
然后使用Collections.sort(array, comparator)
答案 4 :(得分:0)
它没有查看第一个字符,它是根据字符串值进行排序的,就像你在数组中所拥有的一样。
我建议存储两个字段,
数组[0,0] = 50; 数组[0,1] =“马克”
然后根据数字字段进行排序,如果这是您所追求的行为。