以下代码在我的HashMap中获取/设置值是否正确?
Map<String, String> tmpSort = new HashMap<String, String>();
if (myRequest.getSortdatafield() != null) {
tmpSort.put("attribute", myRequest.getSortdatafield());
}
if (myRequest.getSortorder() != null) {
tmpSort.put("descending", (myRequest.getSortorder() == "desc" ? "true" : "false"));
}
myRequest.getSort().putAll(tmpSort);
带有getter / setter的MyRequest类看起来像
public Map<String, String> getSort() {
return sort;
}
public void setSort(Map<String, String> sort) {
if(sort != null){
this.sort = sort;
}
}
public String getSortorder() {
return sortorder;
}
public void setSortorder(String sortorder) {
this.sortorder = sortorder;
}
出于某些原因,我总是得到&#34;降序&#34;属性为假
从UI发送的JSON看起来像
"sort":{"attribute":"colName","descending":true},
sort: null,
sortdatafield: "colName",
sortorder: "asc"
因此,实际上我必须将sortdatafield / sortorder中的正确值映射到sort.attribute并排序.decending
答案 0 :(得分:1)
您没有使用==
运算符来比较Java中的Strings
,请使用.equals()
:
myRequest.getSortorder().equals("desc")
或
"desc".equals(myRequest.getSortOrder())
正如其他人指出的那样,使用后者可以消除NullPointerException
的风险,因此需要执行null
检查(至少由于这个原因),这可能是更可取的。如果要忽略案例(不知道要求有多严格),还有.equalsIgnoreCase()
。
使用==
只是比较每个String
对象的参考值是否相等,这在大多数情况下不太可能是你想要的。
答案 1 :(得分:1)
==
用于检查引用相等而不是内容相等。
if (myRequest.getSortorder() != null) {
tmpSort.put("descending", ("desc".equalsIgnoreCase(myRequest.getSortorder()) ? "true" : "false"));
}
答案 2 :(得分:0)
null
你的价值观是个坏主意。当您想要放入地图的实际值为false
时,可能会导致出现这种情况,但在null
的情况下,它不会被覆盖。所以,这个条件
if (myRequest.getSortorder() != null) {
tmpSort.put("descending", (myRequest.getSortorder() == "desc" ? "true" : "false"));
}
最好只用一行代替:
tmpSort.put("descending", ("desc".equalsIgnoreCase(myRequest.getSortorder()) ? "true" : "false"));
因此,您可能根本不需要检查null
,因为null
值在此上下文中逻辑上将等于false
值。