当前位置: 首页 > 知识库问答 >
问题:

如何将get梯形图替换为可选?[副本]

全丰
2023-03-14

我有一个类结构,例如

 Class A {
     int val;
  }

 Class B {
   A a;
 }

 Class C {
   B b;
 }

现在,所有的类都来自第三方服务,我从中得到一个响应,我想读取int值。但我不想做这样的事

假设c是c类型的变量。

if (c != null && c.getb != null) {
 B b = c.getb()
  and so on.
 }

我想避免这些空检查,因为实际上这些pojos是非常分层的,并且有很多字段。

我试过使用

Optional<Integer> val = Optional.ofNullable(c.getb().geta().getval());
val.elseThrow(Ex::new)

但这不是正确的方法,因为(如果b不存在,它会抛出空指针异常,因为在int上可选)。我可以做些什么来解决这样一种情况,即我无法控制Pojos的声明,但想避免公牛检查?

共有1个答案

平羽
2023-03-14

您可以使用地图

int val = Optional.ofNullable(c)
                  .map(x -> x.getb())
                  .map(x -> x.geta())
                  .map(x -> x.getval())
                  .getOrThrow(Ex::new);

如果知道类名,可以使用方法引用。例如

int val = Optional.ofNullable(c)
                  .map(C::getb)
                  .map(B::geta)
                  .map(A::getval)
                  .getOrThrow(Ex::new);

这是因为如果值不是null,则map将调用该函数一次,否则结果也是null。即任何空值通过map调用链落到最后。

 类似资料:
  • 我得到了一个导入的文本块,但格式并不总是那么完美。之后我会尝试用jquery解决这个问题。所以我开始用 替换 : null null 但替换不起作用。最终的html应该如下所示:

  • 我喜欢的,我觉得很酷的东西 有人能告诉我我没意见吗?也许很酷,但成本很高?我不知道.多谢.

  • 我想用可选的。由于只能连接流,我有以下问题: 如何将可选 转换为流 ? 示例:

  • 问题内容: 我知道可以偏斜,但我看不到以特定角度偏斜每个角的方法。 这是我正在从事的项目: 专门查看菜单中的标签。现在,我正在使用图像,我想针对功能强大的浏览器进行更改。 我知道可以创建CSS trapazoid,但是使用没有内容的边框。最终结果还需要一些圆角。 问题答案: 这可能是一个大概的想法:

  • 问题内容: 使用Mobile Safari 转到http://m.google.com页面时,您会在页面顶部看到漂亮的栏。 我想那样画一些梯形(美国:梯形),但我不知道怎么做。我应该使用CSS3 3D转换吗?如果您有实现此目标的好方法,请告诉我。 问题答案: 您可以使用以下CSS: 制作所有这些形状真的很酷,请查看以下更漂亮的形状: http://css-tricks.com/examples/S

  • 问题内容: 这是Highchart项目符号图表的示例http://jsfiddle.net/jlbriggs/LdHYt/1/ 如何将其转换为列项目符号图表? 问题答案: 这是您要找的东西吗?小提琴