list集合的逆序遍历与排序去重

一.我的使用情景

在做一个小学生四则运算系统时需要显示各个用户的做题记录,与最好成绩。在没有使用数据库,而是将这些信息先写入文档,然后在需要的时候将这些信息从文档中读取出来存到list集合中。由于没办法通过sql语句进行筛选,逆序这些操作,所以只能通过list集合实现逆序遍历与排序去重只保留同一用户最好成绩这样的操作。

二.在jsp页面逆序遍历list集合

1.使用foreach循环逆序遍历集合:

			<c:set var="startIndex" value="${fn:length(studentInf)-1 }"></c:set>
			<c:forEach items="${studentInf}" var="t" varStatus="status">
				<ul class="ti">
					<li>${studentInf[startIndex - status.index].studentId}</li>
					<li>${studentInf[startIndex - status.index].perscore}%</li>
					<li>${studentInf[startIndex - status.index].avgtime}</li>

					<li style="width: 350px;">${studentInf[startIndex - status.index].zttime}
					</li>
				</ul>
			</c:forEach>

2.直接使用java语言实现,只需一行代码:

		Collections.reverse(list1);

三.list按某个属性排序与去重

按照某一属性对list排序(此处按成绩由高到低排序),代码如下:

	           Collections.sort(studentInf, new Comparator<Student>(){  
	            	
	                public int compare(Student o1, Student o2) { 
	                    if(Double.valueOf(o1.getPerscore())<Double.valueOf(o2.getPerscore())){  
	                        return 1;  
	                    }  
	                    if(o1.getPerscore() == o2.getPerscore()){  
	                        return 0;  
	                    }  
	                    return -1;  
	                }  
	            });

其中studentInf是所要排序的list集合。所有用户按从高到低排序后,只要筛选出每个用户第一次出现的成绩,即为用户的最好成绩。所以此处需要对排完序的list集合进行对学号这个属性去重,只保留第一次出现时的数据的操作,具体代码如下:

				for (int i = 0; i < studentInf.size(); i++) {
					for (int j = i + 1; j < studentInf.size(); j++) {
						if (studentInf.get(j).getStudentId().equals(studentInf.get(i).getStudentId())) {
							studentInf.remove(j);
							j--;
						}
					}
				}


猜你喜欢

转载自blog.csdn.net/beijixing3940/article/details/79898504