java对论坛排序操作

本文介绍了一种新闻置顶功能的实现方法,包括如何处理新闻置顶状态的变化、调整已置顶新闻的顺序以及更新数据库中相关记录的过程。

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

/**
	 * 设置新闻置顶,如果该新闻占用了其它新闻的置顶位,则将其它新闻置顶位顺位后移 <br>
	 * 如果是取消置顶,则把其它位置的新闻顺位前移
	 * 
	 * @param publishNews
	 * @param topPublishNewsList
	 * @author liangda
	 * @create 2010-10-15 下午03:01:21
	 */
	private void sortTopList(PublishNews publishNews, List<PublishNews> topPublishNewsList) {
		boolean isPublishNewsTop = false;
		for (PublishNews pn : topPublishNewsList) {
			if (pn.getId() == publishNews.getId()) {
				isPublishNewsTop = true;
				break;
			}
		}

		// 如果之前是置顶的,缓存它旧的置顶位
		int oldPublishNewsIndex = 0;
		if (isPublishNewsTop)
			oldPublishNewsIndex = ((PublishNews) getPublishNewsDao().getEntryObject(publishNews.getId())).getListIndex();

		boolean overMaxIndex = false;
		// 如果设置的排位大于数据库里的最大排位,强制处理为最大排位加1
		if (publishNews.isTopFlag() && publishNews.getListIndex() > topPublishNewsList.size()) {
			int maxIndex = topPublishNewsList.size() + 1;
			publishNews.setListIndex(maxIndex);
			overMaxIndex = true;
		}

		int index = publishNews.getListIndex();

		if (!overMaxIndex && (publishNews.isTopFlag() && isPublishNewsTop)) {
			// 如果之前已经是置顶,现在还是置顶,并且没超出最大排位,则代表换位操作
			for (PublishNews pn : topPublishNewsList) {
				if (oldPublishNewsIndex < index) {
					if (pn.getListIndex() <= oldPublishNewsIndex || index < pn.getListIndex())
						continue;
					pn.setListIndex(pn.getListIndex() - 1); // 如果之前的位置比现在的位置小,其它的就顺位前移
				} else if (oldPublishNewsIndex > index) {
					if (pn.getListIndex() < index || oldPublishNewsIndex <= pn.getListIndex())
						continue;
					pn.setListIndex(pn.getListIndex() + 1); // 如果之前的位置比现在的位置大,其它的就顺位后移
				}
				getPublishNewsDao().update(pn);
			}
		} else if (overMaxIndex && (publishNews.isTopFlag() && isPublishNewsTop)) {
			// 如果之前已经是置顶,现在还是置顶,并且超出最大排位,则代表置为末位
			for (PublishNews pn : topPublishNewsList) {
				int pnIndex = pn.getListIndex();
				if (oldPublishNewsIndex >= pnIndex || publishNews.getId() == pn.getId())
					continue;
				pn.setListIndex(pn.getListIndex() - 1);
				getPublishNewsDao().update(pn);
			}
			// 把新闻的置顶位设置为最大排位
			publishNews.setListIndex(topPublishNewsList.size());
		} else if (publishNews.isTopFlag() && !isPublishNewsTop) {
			// 如果以前不是置顶,现在是置顶,代表是新添加置顶,其它的就顺位后移
			for (PublishNews pn : topPublishNewsList) {
				if (index > pn.getListIndex())
					continue;
				pn.setListIndex(pn.getListIndex() + 1);
				getPublishNewsDao().update(pn);
			}
		} else if (!publishNews.isTopFlag() && isPublishNewsTop) {
			// 如果该新闻之前是设置着置顶的,现在不是置顶的,代表取消置顶,把其它顺位前移
			for (PublishNews pn : topPublishNewsList) {
				if (oldPublishNewsIndex > pn.getListIndex() || publishNews.getId() == pn.getId())
					continue;
				pn.setListIndex(pn.getListIndex() - 1);
				getPublishNewsDao().update(pn);
			}
		}
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值