请考虑以下来自两个类(A
和C
)的对象的列表,
C3,A2,C1,A1,A3
我只想对A
类型的对象进行排序(其他类型的对象保留在其位置),以便输出看起来
像这样:
C3,A1,C1,A2,A3
在Java中是否有任何 直接 方法?
P.S。简单地说,我的意思是,无需实现自定义算法,也无需使用Java类。
答案 0 :(得分:1)
我怀疑您能否提出一个Comparator
,其中包含执行此操作的逻辑,并且肯定不是一个简单的比较器。因此,仅对原始数组进行排序而无需编写自己的排序算法似乎已经解决了。
我的方法是通过剥离C
元素(因此它仅包含A
元素)来生成第二个数组,使用标准Java类对其进行排序,然后重新插入C
个元素处于正确位置。在插入元素时,如果要更改排序的数组长度,则必须对索引稍加小心,但计算起来应该很简单。
答案 1 :(得分:1)
可能不是最简单的解决方案,而是一种(被黑客攻击*)方法:
将所有A
对象添加到新的List
中并对其进行排序:
List<A> list2 = new ArrayList<>();
list2.add(a2);
list2.add(a1);
list2.add(a3);
Collections.sort(list2, new Comparator<A>() {
@Override
public int compare(A a1, A a2) {
return a1.getName().compareTo(a2.getName());
}
});
然后有一个最终列表,如果类型为C
,则从原始列表中添加,否则从排序后的A
列表中添加:
List<Object> resultSet = new ArrayList<>();
int it = 0;
for (Object obj : list) {
if (obj instanceof C) {
resultSet.add(obj);
} else {
resultSet.add(list2.get(it));
it++;
}
}
* 请注意,这只是为了了解操作方法,不是复制的好方法。
答案 2 :(得分:0)
您可以像通常对列表进行排序一样对它进行排序,但是可以使用.getClass()
和.getClass().getSimpleName()
来判断它们是在A类还是C类中,以及实例的名称是什么>