如果在 java 中检查哈希映射键是否存在,如何避免太多
How to avoid too many if while checking hash map key exist or not in java
我映射了用户设置这些字段的位置 name
、productId
、productSerial
、productDesc
、productPrice
因为所有这些都是 optional 在 Java bean 中设置之前的字段我必须检查 key
是否存在并设置值。为实现这一点,我编写了以下代码,但我有太多 if-else
条件无法做到这一点。有人可以建议我们如何在 java 中高效地编写这段代码吗?抱歉,我是 Java 的新手,对于糟糕的编码深表歉意。提前感谢您的帮助。谢谢!
Product.java
public class Product {
private String name;
private String productId;
private String productSerial;
private String productDesc;
private String productPrice;
}
Main.java
public class Main {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("name", "iPhone");
map.put("productId", "2342343");
map.put("productSerial", "FG44D#KLD");
map.put("productDesc", "iPhone plus");
map.put("productPrice", "1500");
Product product = new Product();
if (map.containsKey("name")) {
product.setName((String) map.get("name"));
} else {
product.setName("NOT_EXIST");
}
if (map.containsKey("productId")) {
product.setProductId((String) map.get("productId"));
} else {
product.setProductId("NOT_EXIST");
}
if (map.containsKey("productSerial")) {
product.setProductSerial((String) map.get("productSerial"));
} else {
product.setProductSerial("NOT_EXIST");
}
if (map.containsKey("productDesc")) {
product.setProductDesc((String) map.get("productDesc"));
} else {
product.setProductDesc("NOT_EXIST");
}
if (map.containsKey("productPrice")) {
product.setProductPrice((String) map.get("productPrice"));
} else {
product.setProductPrice("NOT_EXIST");
}
}
}
您需要使用 Map.getOrDefault(key,defValue)
其中 returns 地图中的值或默认值 - 第二个参数。
product.setXYZ(map.getOrDefault("xyz", "NOT_EXIST"));
注意:从JDK1.8开始
您应该使用 Map::getOrDefault
方法,如下所示:
Map<String, String> map = new HashMap<>();
Product product = new Product();
//...
product.setName(map.getOrDefault("name", "NOT_EXIST"));
product.setProductId(map.getOrDefault("productId", "NOT_EXIST"));
product.setProductSerial(map.getOrDefault("productSerial", "NOT_EXIST"))
//...
如果您要设置大量此类属性,那么您也可以考虑使用反射 - 尽管我认为最好尽可能避免使用它。
此外,您不必通过地图转换值 return,因为您指定了地图类型 Map<String,String>
,也就是说,您所有的 .get(..)
和.getOrDefault(..)
呼叫总是 return String
(或 null
)对象 :)
我映射了用户设置这些字段的位置 name
、productId
、productSerial
、productDesc
、productPrice
因为所有这些都是 optional 在 Java bean 中设置之前的字段我必须检查 key
是否存在并设置值。为实现这一点,我编写了以下代码,但我有太多 if-else
条件无法做到这一点。有人可以建议我们如何在 java 中高效地编写这段代码吗?抱歉,我是 Java 的新手,对于糟糕的编码深表歉意。提前感谢您的帮助。谢谢!
Product.java
public class Product {
private String name;
private String productId;
private String productSerial;
private String productDesc;
private String productPrice;
}
Main.java
public class Main {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("name", "iPhone");
map.put("productId", "2342343");
map.put("productSerial", "FG44D#KLD");
map.put("productDesc", "iPhone plus");
map.put("productPrice", "1500");
Product product = new Product();
if (map.containsKey("name")) {
product.setName((String) map.get("name"));
} else {
product.setName("NOT_EXIST");
}
if (map.containsKey("productId")) {
product.setProductId((String) map.get("productId"));
} else {
product.setProductId("NOT_EXIST");
}
if (map.containsKey("productSerial")) {
product.setProductSerial((String) map.get("productSerial"));
} else {
product.setProductSerial("NOT_EXIST");
}
if (map.containsKey("productDesc")) {
product.setProductDesc((String) map.get("productDesc"));
} else {
product.setProductDesc("NOT_EXIST");
}
if (map.containsKey("productPrice")) {
product.setProductPrice((String) map.get("productPrice"));
} else {
product.setProductPrice("NOT_EXIST");
}
}
}
您需要使用 Map.getOrDefault(key,defValue)
其中 returns 地图中的值或默认值 - 第二个参数。
product.setXYZ(map.getOrDefault("xyz", "NOT_EXIST"));
注意:从JDK1.8开始
您应该使用 Map::getOrDefault
方法,如下所示:
Map<String, String> map = new HashMap<>();
Product product = new Product();
//...
product.setName(map.getOrDefault("name", "NOT_EXIST"));
product.setProductId(map.getOrDefault("productId", "NOT_EXIST"));
product.setProductSerial(map.getOrDefault("productSerial", "NOT_EXIST"))
//...
如果您要设置大量此类属性,那么您也可以考虑使用反射 - 尽管我认为最好尽可能避免使用它。
此外,您不必通过地图转换值 return,因为您指定了地图类型 Map<String,String>
,也就是说,您所有的 .get(..)
和.getOrDefault(..)
呼叫总是 return String
(或 null
)对象 :)