我在项目中使用struts,web service(rest)。
在我的动作类(下面命名为AdminMgmtAction)中,我通过使用rest API(getMdmServiceBO()。getLockBO()。getAllActiveUsers();)得到一个hashMap对象(activeUserMap),它存储在ActiveUserMap中,再次扩展了一个hashMap其键为String,值为ActiveUserVO,如下所示。我的要求是基于loggedInTime进行排序。
我尝试过使用比较器接口和linkedHashMap维护顺序,但它不起作用。任何人都可以建议我。
public class AdminMgmtAction extends BaseAction {
public ActionForward showActiveUsers(ActionMapping mapping,ActionForm form, HttpServletRequest request,HttpServletResponse response) {
dlog.debug("Executing showActiveUsers method in AdminMgmtAction...");
ActionForward forward = null;
AdminMgmtForm adminMgmtForm = (AdminMgmtForm) form;
try {
// get the active user map
ActiveUserMap activeUserMap = getMdmServiceBO().getLockBO().getAllActiveUsers();
//LinkedHashMap<String, ActiveUserVO> lm = new LinkedHashMap<String, ActiveUserVO>(activeUserMap);
adminMgmtForm.setAllActiveUsersMap(activeUserMap);
adminMgmtForm.setSelectedUidNSessId(null);
return mapping.findForward(AdminConstants.SHOW_ACTIVE_USERS);
} catch (Exception e) {
flog.fatal("System Exception Occured: " + e.getMessage(), e);
return mapping.findForward(MDMConstants.FAILURE);
}
}
}
public class ActiveUserMap extends LinkedHashMap<String, ActiveUserVO> {
/**
* Changed hashMap to LinkedHashMap
*/
private static final long serialVersionUID = 2584709276177374330L;
public ActiveUserMap() {
super();
}
}
public class ActiveUserVO implements Serializable, Comparable<ActiveUserVO>{
/**
* Implement comparable
*/
private static final long serialVersionUID = -6501714930988894286L;
private String sessionId;
private int userId;
private String username;
private String firstName;
private String lastName;
private String emailAddress;
private boolean aquiredLock;
private Date loggedInTime;
public Date getLoggedInTime() {
return loggedInTime;
}
public void setLoggedInTime(Date loggedInTime) {
this.loggedInTime = loggedInTime;
}
@Override
public int compareTo(ActiveUserVO o) {
// TODO Auto-generated method stub
return o.getLoggedInTime().compareTo(this.loggedInTime);
}
}
答案 0 :(得分:2)
您可以使用java.util.TreeMap
这是一个基于红黑树的NavigableMap实现。地图根据其键的自然顺序进行排序,或者根据使用的构造函数在地图创建时提供的比较器进行排序...
创建将日期映射到TreeMap
的{{1}}。假设您使用的Date对象已经实现了ActiveUserVO
,那么您甚至不需要在ActiveUserVO类中编写自己的对象。
注意:您可能不需要这个额外的课程,但我会将声明放在您仍想使用它的情况下。
Comparable
相反,您可以遍历从API调用中返回的地图并将它们放入TreeMap中。
例如,
public class ActiveUserMap extends TreeMap<Date, ActiveUserVO>
{
}