如何根据键进行过滤以选择两个值中的任何一个

Posted

技术标签:

【中文标题】如何根据键进行过滤以选择两个值中的任何一个【英文标题】:how to filter based on the key to pick either of the two value 【发布时间】:2022-01-11 10:40:54 【问题描述】:

我正面临一个挑战,我的用例是:

OrderItem orderItem = ServicesUtil.getOrderItemValue(drawStore.getOrderItem().getItem(), "Item1");

if(null==orderItem)
    orderItem = ServicesUtil.getOrderItemValue(drawStore.getOrderItem().getItem(), "Item2");

这里,如果没有找到带有“Item1”的键,我的订单项将为空,所以我检查了“Item2”,随后我可以得到整个有效载荷,以防万一,键“Item1”不是找到了。

但这带来了一个术语,我的订单项现在得到一个对 null 的引用,它永远不应该被取消引用/访问。

在这种情况下,如何根据键进行过滤,而不是真正检查订单项是否为空,以避免空指针解引用问题?

【问题讨论】:

您的代码目前可以工作吗?如果它不起作用,那么错误是什么? (而且那不是minimal reproducible example。 是的,它有效,我的用例是避免空值检查,这会导致我出现 JSR-305 问题。 创建一个临时变量,得到最终值后赋给变量?或者... 有coalesce - How to get the first non-null value in Java? - Stack Overflow 或lambda - Is there an elegant way to get the first non null value of multiple method returns in Java? - Stack Overflow 。 我还是不清楚。请解释更多。 【参考方案1】:

所以为了解决这个问题,使用:

Optional.ofNullable(ServicesUtil.getOrderItemValue(drawStore.getOrderItem().getItem(), "pickle")).orElseGet(()->ServicesUtil.getOrderItemValue(drawStore.getOrderItem().getItem(), "ketchup"));

【讨论】:

以上是关于如何根据键进行过滤以选择两个值中的任何一个的主要内容,如果未能解决你的问题,请参考以下文章

按属性过滤对象并使用 jmespath 中的键进行选择

从数组值中过滤字典

如何实现子查询以选择与三个主题中的两个主题匹配的行?

Postgres:如何在 Have 子句中进行 NULL 友好的 MIN 过滤以准确选择一行?

Access VBA 如何根据多选列表框中的选择过滤记录集?

如何根据另一个选择下拉jquery MVC过滤一个选择?