HashMap

时间:2016-02-01 10:12:13

标签: java hashmap

以下代码在我的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

3 个答案:

答案 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)

@shazin和其他人完全正确。我只想改进你的代码风格(但不知道你的想法,很难预测这种风格是否适合你)。所以,我认为检查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值。