List对象排序 遇到的问题

本文详细介绍了Java中如何对List进行升序和降序排序,包括使用Comparable接口自定义排序规则的方法,以及通过Comparator实现灵活排序的过程。文章还澄清了Collections.sort()与Collections.reverse()的区别,避免初学者常见的误区。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    


         第一次写东西。

list<object> 排序 传送门

    http://blog.youkuaiyun.com/bobo14164/article/details/8054708

    http://blog.youkuaiyun.com/benbenkui/article/details/6802529

    http://phl.iteye.com/blog/696700(推荐)


         写这个是因为刚开始在做list排序的时候,看了别人写的一篇文章,说 Collections.sort是升序排列 Collections.reverse是降序排列,然而我自己使用的生活,升序很好实现,然而降序一直不能正常显示,后来百度到一篇文章,说他也是做升序和降序,也是用这两个方法排序,如果先执行reverse后执行sort的话,降序排列出问题,反之则正常,之后我查了相关资料,才发现Collections.reverse并不是什么降序排列,而是反转list中元素的顺序,坑。

之前代码:java bean

public class NearByBean implements Comparable<NearByBean> {

	public String id;
	public String sid;
	public String title;
	public String pic;
	public String address;
	public String distance;
	public String shop_mobile;
	public String is_mall;

	public String getDistance() {
		return distance;
	}

	public void setDistance(String distance) {
		this.distance = distance;
	}

	@Override
	public int compareTo(NearByBean another) {
		// TODO Auto-generated method stub
		// compare(Object 对象1,Object 对象2)重写时
		// 1) 若返回负数,则表示 对象1<对象2
		// 2) 若返回0,则表示 对象1=对象2
		// 3) 若返回正数,则表示 对象1>对象2
		// 反过来,在String类中,他有个CompareTo()方法,他的比较结果也是如此
		// 字符串1.CompareTo(字符串2)比较结果
		// 1) 若字符串1<字符串2,则返回负数
		// 2) 若字符串1=字符串2,则返回0
		// 3) 若字符串1>字符串2,则返回正数
		int a = Integer.valueOf(another.getDistance());
		int b = Integer.valueOf(this.distance);
		return b - a;
		// return this.distance.compareTo(another.getDistance());
	}


调用排序

	/**
	 * 排序list,按商家距离排序
	 * @param mShopList
	 *  Collections.sort(mShopList);  升序排列
	 *   Collections.reverse(mShopList); 反转排列顺序,并不是倒叙
	 */
	@SuppressWarnings("unchecked")
	private void getPxList(List<NearByBean> mShopList) {
		// TODO Auto-generated method stub
		 
		 Collections.sort(mShopList); 
		 for(int i=0;i<mShopList.size();i++){
			 System.out.println("升序   "+i+"---"+mShopList.get(i).title+"------->"+mShopList.get(i).distance);
		 }
		 
		 Collections.reverse(mShopList);  
		 for(int i=0;i<mShopList.size();i++){
			 System.out.println("降序   "+i+"----"+mShopList.get(i).title+"----->"+mShopList.get(i).distance);
		 }
	}


修改后代码:

bean:

public class NearByBean {

	public String id;
	public String sid;
	public String title;
	public String pic;
	public String address;
	public String distance;
	public String shop_mobile;
	public String is_mall;
}


调用:

	/**
	 * list按字段值排序,distance距离
	 * 
	 * @param mShopList
	 *            集合
	 * @param sort
	 *            排序-->正序 倒序
	 * @return
	 */
	public static List<NearByBean> getPxList(List<NearByBean> mShopList, final String sort) {
		// TODO Auto-generated method stub

		Collections.sort(mShopList, new Comparator<NearByBean>() {

			@Override
			public int compare(NearByBean lhs, NearByBean rhs) {
				// TODO Auto-generated method stub
				int a = Integer.valueOf(lhs.distance);
				int b = Integer.valueOf(rhs.distance);
				int result = 0;
				if (sort.equals("asc")) {
					result = a - b;// 升序
				} else if (sort.equals("desc")) {
					result = b - a;// 降序
				}
				return result;
			}
		});
		return mShopList;
	}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值