java arraylist 集合排序问题
我有个从数据库里面加载数据的集合,里面的数据如下:name:2Study:0Complete:0name:2Study:0Complete:0name:共选择了5道题St...
我有个从数据库里面加载数据的集合,里面的数据如下:
name:2 Study:0 Complete:0
name:2 Study:0 Complete:0
name:共选择了5道题 Study:1 Complete:0
name:共选择了5道题 Study:1 Complete:0
name:共选择了5道题 Study:0 Complete:0
name:共选择了5道题 Study:0 Complete:0
name:共选择了5道题 Study:0 Complete:0
name:66不审核 Study:0 Complete:0
name:共选择了4道题 Study:1 Complete:0
name:共选择了4道题 Study:1 Complete:0
name:共选择了4道题 Study:0 Complete:0
name:共选择了4道题 Study:0 Complete:0
现在我对集合按照时间进行排序了(时间我没有打印出来),得到如下的数据:
排序后List:
name:2 Study:0 Complete:0
name:2 Study:0 Complete:0
name:66不审核 Study:0 Complete:0
name:共选择了5道题 Study:1 Complete:0
name:共选择了5道题 Study:0 Complete:0
name:共选择了5道题 Study:0 Complete:0
name:共选择了5道题 Study:0 Complete:0
name:共选择了5道题 Study:1 Complete:0
name:共选择了4道题 Study:1 Complete:0
name:共选择了4道题 Study:0 Complete:0
name:共选择了4道题 Study:0 Complete:0
name:共选择了4道题 Study:1 Complete:0
问题来了: 我想将2个或 2个以上的同名对象还是按照排序前那样不做排序处理,即:
里面的 2,共选择了5道题,共选择了4道题 还是按照未排序前的顺序排序,
只针对 name 排序, 想要的效果如下:
name:2 Study:0 Complete:0
name:2 Study:0 Complete:0
name:66不审核 Study:0 Complete:0
name:共选择了5道题 Study:1 Complete:0
name:共选择了5道题 Study:1 Complete:0
name:共选择了5道题 Study:0 Complete:0
name:共选择了5道题 Study:0 Complete:0
name:共选择了5道题 Study:0 Complete:0
name:共选择了4道题 Study:1 Complete:0
name:共选择了4道题 Study:1 Complete:0
name:共选择了4道题 Study:0 Complete:0
name:共选择了4道题 Study:0 Complete:0
请教大神,该怎么做? 展开
name:2 Study:0 Complete:0
name:2 Study:0 Complete:0
name:共选择了5道题 Study:1 Complete:0
name:共选择了5道题 Study:1 Complete:0
name:共选择了5道题 Study:0 Complete:0
name:共选择了5道题 Study:0 Complete:0
name:共选择了5道题 Study:0 Complete:0
name:66不审核 Study:0 Complete:0
name:共选择了4道题 Study:1 Complete:0
name:共选择了4道题 Study:1 Complete:0
name:共选择了4道题 Study:0 Complete:0
name:共选择了4道题 Study:0 Complete:0
现在我对集合按照时间进行排序了(时间我没有打印出来),得到如下的数据:
排序后List:
name:2 Study:0 Complete:0
name:2 Study:0 Complete:0
name:66不审核 Study:0 Complete:0
name:共选择了5道题 Study:1 Complete:0
name:共选择了5道题 Study:0 Complete:0
name:共选择了5道题 Study:0 Complete:0
name:共选择了5道题 Study:0 Complete:0
name:共选择了5道题 Study:1 Complete:0
name:共选择了4道题 Study:1 Complete:0
name:共选择了4道题 Study:0 Complete:0
name:共选择了4道题 Study:0 Complete:0
name:共选择了4道题 Study:1 Complete:0
问题来了: 我想将2个或 2个以上的同名对象还是按照排序前那样不做排序处理,即:
里面的 2,共选择了5道题,共选择了4道题 还是按照未排序前的顺序排序,
只针对 name 排序, 想要的效果如下:
name:2 Study:0 Complete:0
name:2 Study:0 Complete:0
name:66不审核 Study:0 Complete:0
name:共选择了5道题 Study:1 Complete:0
name:共选择了5道题 Study:1 Complete:0
name:共选择了5道题 Study:0 Complete:0
name:共选择了5道题 Study:0 Complete:0
name:共选择了5道题 Study:0 Complete:0
name:共选择了4道题 Study:1 Complete:0
name:共选择了4道题 Study:1 Complete:0
name:共选择了4道题 Study:0 Complete:0
name:共选择了4道题 Study:0 Complete:0
请教大神,该怎么做? 展开
2个回答
展开全部
你可以使用Collections 提供的sort方法对ArrayList进行排序,sort方法提供了一个Comparator接口类型的参数,这个参数中可以自定义排序规则
你可以自定义一个类实携型现Comparator接口,在里面编写你需要的排序规则,然后通过以下方式排序ArrayList
Collections.sort(arraylist,自定义排序规则对象);
sort
public static <T> void sort(List<T> list,
Comparator<? super T> c)
根据指定比较器产生的顺序对指定列表进行排序。此列表内的所有元素都必须可使用指定比较器相互比较(也就是说,对于列表中的任意
e1 和 e2 元素,c.compare(e1, e2) 不得抛出
ClassCastException)。
此排序被保证是稳定的:不会因调用 sort 而对相等的元素进行重新排序。
排序算法是一个经过修改的合并排序算法(其中,如果低子列表中的最高元素小塌贺于高子列表中的最低元素,则忽略合并)。此算辩衫猜法提供可保证的 n log(n) 性能。
指定列表必须是可修改的,但不必是可大小调整的。此实现将指定列表转储到一个数组中,并对数组进行排序,在重置数组中相应位置每个元素的列表上进行迭代。这避免了由于试图原地对链接列表进行排序而产生的
n2 log(n) 性能。
参数:
list - 要排序的列表。
c - 确定列表顺序的比较器。null 值指示应该使用元素的自然顺序。
抛出:
ClassCastException -
如果列表中包含不可使用指定比较器相互比较 的元素。
UnsupportedOperationException
- 如果指定列表的列表迭代器不支持 set 操作。
另请参见:
Comparator
java.util
接口 Comparator<T>
类型参数:
T - 此 Comparator 可以比较的对象类型
你可以自定义一个类实携型现Comparator接口,在里面编写你需要的排序规则,然后通过以下方式排序ArrayList
Collections.sort(arraylist,自定义排序规则对象);
sort
public static <T> void sort(List<T> list,
Comparator<? super T> c)
根据指定比较器产生的顺序对指定列表进行排序。此列表内的所有元素都必须可使用指定比较器相互比较(也就是说,对于列表中的任意
e1 和 e2 元素,c.compare(e1, e2) 不得抛出
ClassCastException)。
此排序被保证是稳定的:不会因调用 sort 而对相等的元素进行重新排序。
排序算法是一个经过修改的合并排序算法(其中,如果低子列表中的最高元素小塌贺于高子列表中的最低元素,则忽略合并)。此算辩衫猜法提供可保证的 n log(n) 性能。
指定列表必须是可修改的,但不必是可大小调整的。此实现将指定列表转储到一个数组中,并对数组进行排序,在重置数组中相应位置每个元素的列表上进行迭代。这避免了由于试图原地对链接列表进行排序而产生的
n2 log(n) 性能。
参数:
list - 要排序的列表。
c - 确定列表顺序的比较器。null 值指示应该使用元素的自然顺序。
抛出:
ClassCastException -
如果列表中包含不可使用指定比较器相互比较 的元素。
UnsupportedOperationException
- 如果指定列表的列表迭代器不支持 set 操作。
另请参见:
Comparator
java.util
接口 Comparator<T>
类型参数:
T - 此 Comparator 可以比较的对象类型
追问
看不懂
展开全部
举得案列不明显
追问
很简单的,就是对不同name的对象排序,相同name的对象不排序,怎么搞?
追答
//这下面的案列能解决你的问题。你套着来。
//Integer改成你的对象
class ComparatorNum implements Comparator<Integer>{
@Override
public int compare(Integer o1, Integer o2) {
//-1 代表降序 1 代表升序 你可以判断如果名字不相同,你就返回1或-1 名字相同就0代表不排序
if (o1>o2) {
return -1;
}else if(o1==o2){
return 0;
}else{
return 1;
}
}
}
//调用方法
ComparatorNum comparatorNum=new ComparatorNum();
Collections.sort(list,comparatorNum);
for (Integer integer : list) {
System.err.println("-----------------------------");
System.err.println(integer);
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询