我想通过交替最大值和最小值来对我的float数组进行排序。 即最大,最小,次大,次小等。
例如,我在Arraylist中有以下值:
[1.22 ,2.55 ,9.88 ,7.23 ,8.22]
我想把它排序为:
[9.88, 1.22 ,8.22 ,2.55 ,7.23]
目前我正在使用以下代码
对decessending顺序排序值Collections.sort(characterPairs, new Comparator<Pair<String, Double>>() {
@Override
public int compare(Pair<String, Double> o1, Pair<String, Double> o2) {
if(o1.second>o2.second)
return -1;
if(o1.second<o2.second)
return 1;
return 0;
}
});
答案 0 :(得分:2)
我完成了以下代码,感谢大家的时间。
Collections.sort(characterPairs, new Comparator<Pair<String, Double>>() {
@Override
public int compare(Pair<String, Double> o1, Pair<String, Double> o2) {
double n1,n2;
if(o1.second<0.50) // 0.50 is the posible mean value
n1=1-o1.second; // 1 is the maximum posible value
else
n1=o1.second;
if(o2.second<0.50) // 0.50 is the posible mean value
n2=1-o2.second; // 1 is the maximum posible value
else
n2=o2.second;
if(n1>n2)
return -1;
if(n1<n2)
return 1;
return 0;
}
});
此处如果值很小,那么平均值(50%)我从最大可能值中减去它,然后按降序排序。 (减去的值仅用于对实际值进行排序。)
所以如果我在数组中有这些值
[0.11,0.34,0.99,0.85,0.21]
它将按
排序[ 0.99 , 0.11 (0.89) , 0.85 , 0.21 (0.79) , 0.34 (0.66)]
答案 1 :(得分:1)
我认为这太复杂了,无法尝试使用简单的比较器来解决它。您需要两个步骤,首先是常规排序,第二步是特殊合并。
// first step:
Collections.sort(characterPairs, (o1, o2) -> {
return Double.compare(o1.second, o2.second);
});
// second step:
List<Pair<String, Double>> result = new ArrayList<>(characterPairs.size());
while (!characterPairs.isEmpty()){
result.add(characterPairs.remove(characterPairs.size() -1));
if (!characterPairs.isEmpty()) {
result.add(characterPairs.remove(0));
}
}
characterPairs = result;