我需要根据“Prioridade”属性对列表进行排序,之后,我需要将所有元素isConsumido()= true放到列表的末尾,我该怎么做?
我尝试了这个,但是循环了。
public void ordenar(List<ItemCultural> array) {
int i;
boolean a = true;
while (a) {
a = false;
for (i = 0; i < array.size() - 1; i++) {
if (array.get(i).getPrioridade() < array.get(i + 1).getPrioridade()) {
Collections.swap(array, i, i + 1);
a = true;
}
}
}
a = true;
while (a){
a = false;
for (i = 0; i < array.size() - 1; i++) {
if (array.get(i).isConsumido()) {
Collections.swap(array, i, array.size()-1);
a = true;
}
}
}
}
getPrioridade()返回一个int,isConsumido返回true或false。谢谢!
答案 0 :(得分:0)
无需排序两次,只需根据您拥有的两个标准实施Comparator
或类似标准:主要标准是isConsumido
(放置标准在最后的情况下,次要标准是相对先验:
yourList.sort(new Comparator<ItemCultural>() {
public int compare(ItemCultural a, ItemCultural b) {
int result;
if (a.isConsumido()) {
result = b.isConsumido() ? 0 : 1;
} else {
result = b.isConsumido() ? -1 : 0;
}
if (result == 0) {
result = a.getPrioridade() - b.getPrioridade();
}
return result;
}
});
(上面我使用yourList
而不是array
作为变量的名称。调用引用List
&#34;的变量array&#34;既奇怪又有误导性。)
答案 1 :(得分:0)
您只需尝试删除元素并将其添加回列表即可。
它会将元素推送到列表的末尾,并且不需要while循环:
[编辑]
int k = 0;
for (i = 0; i < array.size()-k; i++) {
if (array.get(i).isConsumido()) {
ItemCultural item = array.remove(i);
array.add(item);
k++;
i--;
}
}
答案 2 :(得分:-1)
我会在ItemCultural中实现Comparable并使用Collections.sort(array)。我无法理解“isConsumido()= true”部分代码。