可选项,在orElse之前进行附加处理

huangapple go评论73阅读模式
英文:

Optional with additional processing before orElse

问题

在我的服务中,我想要返回 MAX+1,或者返回 10000000。我有一个 fooRepository.findMax() 方法,它返回一个 Optional<Long>,其中包含了最大值。

要如何在一行代码中完成,就像下面这样(我只是缺少递增部分):

fooRepository.findMax().map(max -> max + 1).orElse(10000000L)

PS:我知道我可以使用 ifPresent 在多行中实现这个。

英文:

In my service I want to return the MAX+1 OR return 10000000 instead, I have fooRepository.findMax() which return an Optional&lt;Long&gt; which is the MAX.

How to do it in just one line like below (I miss just the increment part)

fooRepository.findMax().orElse(10000000L)

PS: I know I can do it in multiple lines with ifPresent ...

答案1

得分: 3

这似乎是一个奇怪的要求,但为什么不只是这样做...

fooRepository.findMax().orElse(9999999L) + 1

英文:

This seems like a weird requirement, but why not just do...

fooRepository.findMax().orElse(9999999L) + 1

?

答案2

得分: 3

你可以使用 map 方法对 Optional 的内容进行操作。如果 Optional 为空,则不会执行操作。

就像这样:

fooRepository.findMax()
    .map(max -> max + 1)
    .orElse(10000000L);
英文:

You can use the map method to do something with the contents of the Optional. If the Optional is empty, it is not executed.

Like this:

fooRepository.findMax()
    .map(max -&gt; max + 1)
    .orElse(10000000L);

答案3

得分: 3

这就是 map 的作用:

fooRepository.findMax().map(m -> m + 1).orElse(10000000L)
英文:

That's what map is for:

fooRepository.findMax().map(m -&gt; m + 1).orElse(10000000L)

huangapple
  • 本文由 发表于 2020年10月20日 18:41:18
  • 转载请务必保留本文链接:https://go.coder-hub.com/64443465.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定