如何通过Java Stream根据InventoryItem名称获取对应amount值
解决方案
你需要在filter之后加上map操作,把InventoryItem对象转换为它的amount属性,同时处理可能没有匹配项的情况(避免空指针)。
完整代码示例
// 假设inventoryItems是你的List<InventoryItem>实例 Optional<Integer> matchedAmount = inventoryItems.stream() .filter(item -> item.getName().equals(name)) // 筛选名称匹配的物品 .map(InventoryItem::getAmount) // 提取物品的amount值 .findFirst(); // 获取第一个匹配结果(返回Optional,处理无匹配的情况)
如何使用结果
因为可能不存在名称匹配的物品,findFirst会返回Optional<Integer>,推荐用以下安全方式处理:
- 设置默认值(无匹配时返回0):
int amount = matchedAmount.orElse(0); - 仅当存在结果时执行逻辑:
matchedAmount.ifPresent(amount -> { // 这里处理获取到的amount值,比如打印或业务逻辑 System.out.println("匹配物品的数量:" + amount); });
额外提示
如果需要忽略名称的大小写匹配,可以把equals改成equalsIgnoreCase:
.filter(item -> item.getName().equalsIgnoreCase(name))
内容的提问来源于stack exchange,提问作者doc
相关产品推荐
相关产品推荐

