今天在页面使用jstl的<c:froEach>遍历HashMap
但是每次刷新时顺序都会变化,原来HashMap是遍历时是无序的!如是就想到使用TreeMap
BaseState的代码 如下:
但是使用后就一直报,[color=red] ...cannot be cast to java.lang.Comparable[/color]
查看了TreeMap的原码发现HashMap有如下的构造方法:
原来TreeMap是有序的,有序就说明TreeMap中的每个Key元素都需要能比较,只有这样才能排序。如是我就在BaseState这个Bean改成了如下:
此时再调用这个错误解决了!
<c:forEach items="${ydMap }" var="m">
<div class="mbody">
<div class="title cv">${m.key.stateName }<a href="${pageContext.request.contextPath }/pl/deleteBlackStatesByState.do?id=${m.key.id }&flag=0"><img src="${pageContext.request.contextPath }/images/jh.png" /></a>:</div>
<div class="text">
<c:forEach items="${m.value }" var="l">
<span class="cv">${l.states }<a href="${pageContext.request.contextPath }/pl/removeBlackStates.do?id=${l.id }"><img src="${pageContext.request.contextPath }/images/jh.png" /></a></span>
</c:forEach>
</div>
</div>
</c:forEach>
但是每次刷新时顺序都会变化,原来HashMap是遍历时是无序的!如是就想到使用TreeMap
Map<BaseState,List<BlackChannelStates>> map=new TreeMap<BaseState,List<BlackChannelStates>>();
BaseState的代码 如下:
public class BaseState implements Comparable<BaseState>{
private Integer id;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}
但是使用后就一直报,[color=red] ...cannot be cast to java.lang.Comparable[/color]
查看了TreeMap的原码发现HashMap有如下的构造方法:
public TreeMap(Comparator<? super K> comparator) {
this.comparator = comparator;
}
原来TreeMap是有序的,有序就说明TreeMap中的每个Key元素都需要能比较,只有这样才能排序。如是我就在BaseState这个Bean改成了如下:
public class BaseState implements Comparable<BaseState>{
private Integer id;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Override
public int compareTo(BaseState o) {
// TODO Auto-generated method stub
return o.getId()-this.getId();
}
}
此时再调用这个错误解决了!