混合数组怎么仅仅对某种类型的数据排序,排序结果还是要保持别的类型的数据的顺序?怎么仅对数组的某类型排序?
http://blog.csdn.net/w_sx_/article/details/38474515
这种需求倒是很奇怪……
要我说的话,自己写一个排序类吧。
就照着那个排序算法,把该替换的替换了就行。
最简单的选择法:
public class TestA {
public static void main(String[] args) throws Exception {
Object[] objects = new Object[] { "1", 15, new TestA(), 123L, 1.5, 3, 100, 2 };
for (Object obj : objects) {
System.out.print(obj);
System.out.print(" - ");
}
System.out.println();
new TestA().sort(objects, Integer.class, (a, b) -> {
return a.compareTo(b);
});
for (Object obj : objects) {
System.out.print(obj);
System.out.print(" - ");
}
}
private <T> void sort(Object[] objects, Class<T> clazz, Comparator<T> cp) {
Object sortObject;
for (int i = 0; i < objects.length; i++) {
if (!clazz.isAssignableFrom(objects[i].getClass())) {
continue;
}
sortObject = objects[i];
int sortIndex = i;
for (int j = i; j < objects.length; j++) {
if (!clazz.isAssignableFrom(objects[j].getClass())) {
continue;
}
// 正向排序、逆向排序,就是这里等于1还是等于-1
if (1 == cp.compare(clazz.cast(sortObject), clazz.cast(objects[j]))) {
sortObject = objects[sortIndex = j];
}
}
objects[sortIndex] = objects[i];
objects[i] = sortObject;
}
}
}
代码实现的很简陋,复杂度奇高,当然可以进行优化。