我正在开发一个restful api,它管理一个背包清单,只是为了学习。但我正在为创建功能而苦苦挣扎,该功能负责持久化新库存。因此,每次我向api发出POST请求时,我都会收到一个新库存的iten列表,然后我必须处理每个商品的数量,并由此获得名为"points“的item对象属性的值。
我的api接收到的json对象是这样的:
{
"inventory": [
{
"name": "Meat",
"quantity": 4
},
{
"name": "Water",
"quantity": 1
},
{
"name": "Wood",
"quantity": 7
},
{
"name": "Iron",
"quantity": 3
}
]
}
系统只有四种类型的项目,对于每一种类型,我都会得到特定的点数。
示例:
Meat - 6 points
Water - 7 points
Wood - 3 points
Iron - 2 points
现在我必须处理每个项目的数量来获得我的积分。问题是我的java方法不能正确地验证我的项名称。正因为如此,当我持久化新的库存时,该方法会将null赋给我的points属性。
我的Item类如下所示:
public class Item {
private String name;
private Integer quantity;
private Integer points;
//get and set omitted;
}
我的背包类看起来像这样:
public class Backpack{
private List<Item> inventory;
//get and set ommited;
}
负责接收和处理我的积分的方法如下所示
@PostMapping()
public void createInventory(@RequestBody Backpack backpack) {
backpack.getInventory().stream().forEach(i -> i.setPoints(calcPoints(i)));
backpackDao.persistInventory(backpack);
}
public Integer calcPoints(Item item) {
if (item.getName().toLowerCase() == "meat")
return item.getQuantity * 6;
if (item.getName().toLowerCase() == "water")
return item.getQuantity * 7;
if (item.getName().toLowerCase() == "wood")
return item.getQuantity * 3;
if (item.getName().toLowerCase() == "iron")
return item.getQuantity * 2;
return null;
}
我将项目名称设置为小写,只是为了使条件检查更容易一些。以防有人尝试使用up大小写字符串。如果我在流操作之后尝试打印每个项目,我可以获得项目名称和项目数量,但点数为空。我尝试打印一个简单的日志,以了解我的方法calcPoints是否正在调用,并且确实调用了。但由于某些原因,条件语句不起作用。我想要一些关于我如何解决这个问题的建议或建议。我认为这可能是简单的东西,但我真的还没有看到它。
发布于 2018-06-02 07:19:59
不要使用==
进行字符串比较。请改用equals()
。
试试这个:
item.getName().equalsIgnoreCase("meat")
发布于 2018-06-02 07:34:01
卡拉卡莱斯的答案是正确的。但是你也可以使用开关外壳:
switch (item.getName().toLowerCase()) {
case "meat":
return item.getQuantity * 6;
...
}
发布于 2018-06-02 07:41:38
公共整数项目(项目calcPoints){
if (item.getName().equalsIgnoreCase("meat"))
return item.getQuantity * 6;
else if (item.getName().equalsIgnoreCase("water"))
return item.getQuantity * 7;
else if (item.getName().equalsIgnoreCase("wood"))
return item.getQuantity * 3;
else if (item.getName().equalsIgnoreCase("iron"))
return item.getQuantity * 2;
return 0;
}
https://stackoverflow.com/questions/50652022
复制相似问题