首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何用java计算列表中的item属性?

如何用java计算列表中的item属性?
EN

Stack Overflow用户
提问于 2018-06-02 07:14:22
回答 3查看 48关注 0票数 0

我正在开发一个restful api,它管理一个背包清单,只是为了学习。但我正在为创建功能而苦苦挣扎,该功能负责持久化新库存。因此,每次我向api发出POST请求时,我都会收到一个新库存的iten列表,然后我必须处理每个商品的数量,并由此获得名为"points“的item对象属性的值。

我的api接收到的json对象是这样的:

代码语言:javascript
复制
{
    "inventory": [
        {
            "name": "Meat",
            "quantity": 4
        },
        {
            "name": "Water",
            "quantity": 1
        },
        {
            "name": "Wood",
            "quantity": 7
        },
        {
            "name": "Iron",
            "quantity": 3
        }
    ]
}

系统只有四种类型的项目,对于每一种类型,我都会得到特定的点数。

示例:

代码语言:javascript
复制
Meat - 6 points
Water - 7 points
Wood - 3 points
Iron - 2 points

现在我必须处理每个项目的数量来获得我的积分。问题是我的java方法不能正确地验证我的项名称。正因为如此,当我持久化新的库存时,该方法会将null赋给我的points属性。

我的Item类如下所示:

代码语言:javascript
复制
public class Item {
    private String name;
    private Integer quantity;
    private Integer points;

    //get and set omitted;
}

我的背包类看起来像这样:

代码语言:javascript
复制
public class Backpack{
    private List<Item> inventory;

    //get and set ommited;
}

负责接收和处理我的积分的方法如下所示

代码语言:javascript
复制
@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是否正在调用,并且确实调用了。但由于某些原因,条件语句不起作用。我想要一些关于我如何解决这个问题的建议或建议。我认为这可能是简单的东西,但我真的还没有看到它。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-02 07:19:59

不要使用==进行字符串比较。请改用equals()

试试这个:

代码语言:javascript
复制
item.getName().equalsIgnoreCase("meat")

这可能对How do I compare strings in Java?很有帮助

票数 0
EN

Stack Overflow用户

发布于 2018-06-02 07:34:01

卡拉卡莱斯的答案是正确的。但是你也可以使用开关外壳:

代码语言:javascript
复制
switch (item.getName().toLowerCase()) {
    case "meat":
        return item.getQuantity * 6;
    ...
}
票数 0
EN

Stack Overflow用户

发布于 2018-06-02 07:41:38

公共整数项目(项目calcPoints){

代码语言:javascript
复制
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;

}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50652022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档