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

如何替换函数样式中的“return optObj.isPresent()?new Obj2(optObj):null”?

纪俊良
2023-03-14

我的IDE(InteliJ)一直告诉我,我的代码“可以用函数式的单个表达式替换”,突出显示了isPresent()

return timestamp.isPresent() ? new Obj2(timestamp.get()) : null;

时间戳初始化为可选:

Optional<Date> timestamp = ...

我的假设是我应该使用ifPresent。就像这个时间戳。ifPresent(Obj2::new)。但是,ifPresent无效,我没有机会返回创建的对象。也不能返回null。我的代码有解决方案吗?

共有2个答案

缑文栋
2023-03-14

此外,与forEach()一样,ifPresent()将消费者作为参数,因此它可以引入副作用。你通常会用它来打印或记录东西。

常鸿朗
2023-03-14

你说的是正确的,ifPresent返回void,因此不适合这种情况。您的IDE建议您只需执行以下操作:

timestamp.map(Obj2::new).orElse(null);

这表示为“如果可选的时间戳具有当前状态,则将其包含的对象传递到Obj2构造函数中,并返回这个新的Obj2实例,否则(orElse)返回null)。

另一方面,IntelliJ IDEA可以帮助您生成它建议的代码。

例如,给定以下屏幕截图:

我只需点击“突出显示”部分并按下“ALT ENTER”,IntelliJ建议是否应该用功能性样式替换该条件。

 类似资料:
  • 我用Mockito写UT,我想替换我的mock函数(哪个DB选择操作) 使用我在测试类中编写的新函数(使用map模拟数据库选择); 我想用正确的键输入返回正确的值 我试图这样做使用ArgumentCaptor如下,但它没有工作,因为我想 我想当调用dataBaseSelect.selectDataFromDB时,它将被模拟,然后从MapSelect.selectDataFromMap返回结果,参数

  • null 我读过PDO的书。如何使用MySQL或MSSQL将代码更新为PDO?

  • 问题内容: 我的文字可能具有不同的换行样式。我想将所有换行符’\ r \ n’,’\ n’,’\ r’替换为同一换行符(在本例中为\ r \ n)。 最快的方法是什么?我当前的解决方案如下所示: 问题是您无法一次替换,因为\ r \ n将被复制到\ r \ n \ r \ n。 感谢您的帮助! 问题答案: 如果您不想替换所有Unicode换行符,而是仅替换CRLF样式的换行符,请使用: 匹配这些换

  • 问题内容: 我正在用SQL创建一个临时过程,因为我有一个用markdown编写的表的值,因此该表在Web浏览器中显示为HTML (markdown到HTML转换) 。 该列的字符串当前如下所示: 我目前正在使用粗体和斜体文本。这意味着 (以粗体显示的情况下), 我需要更换奇N次的格局与乃至倍。 我看到了replace(),但是它在字符串的所有模式上执行替换。 那么,如何仅当它是奇数或偶数时才替换子

  • 我正在尝试将登录用户的详细信息提供给我的应用程序。我有以下代码在Angular 5中工作,但在Angular 6中不工作,因为. share()函数在rxjs 6中丢失 我需要这个吗。share()函数?关于rxjs 6的更改,我的代码看起来还好吗?

  • 本文向大家介绍javascript字符串替换函数如何一次性全部替换掉,包括了javascript字符串替换函数如何一次性全部替换掉的使用技巧和注意事项,需要的朋友参考一下 JS字符串替换函数:Replace(“字符串1″, “字符串2″) 1.我们都知道JS中字符串替换函数是Replace(“字符串1″, “字符串2″),但是这个函数只能将第一次出现的字符串1替换掉,那么我们如何才能一次性全部替换