先定义类
public class sortContours implements Comparator<MatOfPoint>{
public int compare(MatOfPoint p1, MatOfPoint p2) {
return p1.toArray().length - (p2.toArray().length);
}
}
再调用<pre name="code" class="java">MatOfPoint MP[] = new MatOfPoint[contours.toArray().length];
MP = contours.toArray(MP);
Arrays.sort(MP, new sortContours());
另外一种方法是用Collections,见代码:
ArrayList<ArrayList<Double>> Shoulder_FL = new ArrayList<ArrayList<Double>>();
<pre name="code" class="java">Shoulder_FL需赋值...
Comparator<ArrayList<Double>> comparator = new Comparator<ArrayList<Double>>() {
public int compare(ArrayList<Double> c1, ArrayList<Double> c2) {
return (int)(c2.get(181) - c1.get(181)); // use your logic
}
};
Collections.sort(Shoulder_FL, comparator);
但是第二种方法有时会报出comparison method violates its general contract!的错误。原因见:http://dertompson.com/2012/11/23/sort-algorithm-changes-in-java-7/
所以修改上述<span style="font-family: Arial, Helvetica, sans-serif;">Comparator为:</span>
<span style="font-family: Arial, Helvetica, sans-serif;"></span><p class="p1">Comparator<ArrayList<Double>> <span class="s1">comparator</span> = <span class="s2">new</span> Comparator<ArrayList<Double>>() {</p><p class="p1"><span> </span> <span class="s2">public</span> <span class="s2">int</span> compare(ArrayList<Double> <span class="s1">c1</span>, ArrayList<Double> <span class="s1">c2</span>) {</p><p class="p1"><span> </span> <span> </span><span class="s2">if</span> (<span class="s1">c2</span>.get(181) == <span class="s1">c1</span>.get(181)) {</p><p class="p1"><span> </span> <span> </span> <span class="s2">return</span> 0;//0即为不排序, 1为降序</p><p class="p1"><span> </span> <span> </span>}</p><p class="p1"><span> </span> <span> </span><span class="s2">else</span> <span class="s2">if</span> (<span class="s1">c2</span>.get(181) < <span class="s1">c1</span>.get(181)) {</p><p class="p1"><span> </span> <span> </span> <span class="s2">return</span> -1;//升序排序</p><p class="p1"><span> </span> <span> </span>}</p><p class="p1"><span> </span> <span> </span><span class="s2">else</span> {</p><p class="p1"><span> </span> <span> </span> <span class="s2">return</span> 1;//降序排序</p><p class="p1"><span> </span> <span> </span>}</p><p class="p1"><span> </span> }</p><p class="p1"><span> </span> };</p>
参考文章:http://www.tutorialspoint.com/java/util/arraylist_toarray.htm
http://fuxueliang.com/tech/2013/05/26/java-sorting-comparator-vs-comparable-tutorial/