代码片断:安全的subList()方法

	/**
	 * 从类集中找到前几个元素,组成新的类集再返回。 <br/>
	 * 1. 如果想要的元素个数超过了类集的大小,则返回该类集中的所有元素组成的类集 <br/>
	 * 2. 原类集对象不会被修改<br/>
	 * 3. 返回ArrayList,它可能为empty,但不会是null<br/>
	 * 
	 * @param list
	 * @param elementCount
	 *            想要的元素个数; 如果个数不是正数,则返回空list
	 * @return
	 */
	public static <T> ArrayList<T> selectTopElements(List<T> list,
			int elementCount) {
		ArrayList<T> resultList = new ArrayList<T>();
		if (list == null) {
			return resultList;
		}

		if (elementCount <= 0) {
			return resultList;
		}

		List<T> subList = list.subList(0, Math.min(list.size(), elementCount));
		resultList.addAll(subList);
		return resultList;
	}

	/**
	 * 从类集的指定下标开始取一定个数的元素<br/>
	 * 0. 如果取10个,但只剩5个,则返回5个元素组成的类集<br/>
	 * 1. 原类集对象不会被修改<br/>
	 * 2. 返回ArrayList,它可能为empty,但不会是null<br/>
	 * 
	 * @author 集安 2013年10月9日下午2:21:19
	 * @param list
	 * @param startIndex
	 *            0-based,inclusive
	 * @param elementCount
	 * @return
	 */
	public static <T> ArrayList<T> selectElementsFrom(List<T> list,
			int startIndex, int elementCount) {
		ArrayList<T> resultList = new ArrayList<T>();
		if (list == null) {
			return resultList;
		}
		if (startIndex < 0) {
			return resultList;
		}
		if (elementCount <= 0) {
			return resultList;
		}
		if (startIndex >= list.size()) {
			return resultList;
		}
		List<T> subList = list.subList(startIndex,
				Math.min(list.size(), startIndex + elementCount));
		resultList.addAll(subList);
		return resultList;
	}

	/**
	 * 获取类集的某下标前的一定个数的元素<br/>
	 * 
	 * 1. 原类集对象不会被修改<br/>
	 * 2. 返回ArrayList,它可能为empty,但不会是null<br/>
	 * 
	 * @author 集安 2013年10月9日下午2:21:19
	 * @param list
	 * @param endIndex
	 *            0-based,exclusive
	 * @param elementCount
	 * @return
	 */
	public static <T> ArrayList<T> selectElementsUpTo(List<T> list,
			int endIndex, int elementCount) {
		ArrayList<T> resultList = new ArrayList<T>();
		if (list == null) {
			return resultList;
		}
		if (endIndex <= 0) {
			return resultList;
		}
		if (elementCount <= 0) {
			return resultList;
		}

		int startIndex = Math.max(0, endIndex - elementCount);
		if (startIndex > list.size() - 1) {
			return resultList;
		}

		elementCount = endIndex - startIndex;
		
		List<T> subList = list.subList(startIndex,
				Math.min(list.size(), startIndex + elementCount));
		resultList.addAll(subList);
		return resultList;
	}




Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.