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

如何编写安全的 java.util.在获取 aList.get(0) 时可选的空指针赋值?

蔚学真
2023-03-14

我有以下代码,在调用.getList()时抛出。get(0)为空。

Optional<MyObject> _obj = java.util.Optional.ofNullable(objParam);

// where getListOfMyObjects() returns List<MyObjects>
Optional<String> desc = Optional.ofNullable(_obj.get().getMyParentObject().getListOfMyObjects().get(0).getDesc());

如何编写安全的java 8可选代码(使用. map等),以防止. getList(). get(0)抛出?

共有1个答案

裴焱
2023-03-14

这是你想做的吗?

Optional<String> desc = Optional.ofNullable(objParam)
        .map(MyObject::getMyParentObject)
        .map(MyObject::getListOfMyObjects)
        .filter(lst -> ! lst.isEmpty())
        .map(lst -> lst.get(0))
        .map(MyObject::getDesc);

另一种方法是获取列表的,然后使用findFirst。我不确定在可选中使用流是否非常清楚,但以下是您这样做的方法:

Optional<String> desc = Optional.ofNullable(objParam)
        .map(MyObject::getMyParentObject)
        .map(MyObject::getListOfMyObjects)
        .map(List::stream)
        .flatMap(Stream::findFirst)
        .map(MyObject::getDesc);
 类似资料:
  • 问题内容: 我现在在代码中使用ReentrantReadWriteLock来同步树状结构的访问。这种结构很大,可以被许多线程同时读取,偶尔对其一部分进行修改,因此似乎很适合读写习惯。我了解到,对于这一特定类,不能将读取锁提升为写入锁,因此根据Javadocs,必须在获得写入锁之前释放读取锁。之前,我已经在非可重入上下文中成功使用了这种模式。 但是,我发现我无法可靠地获取写锁而不会永远阻塞。由于读锁

  • 嗨我有以下方法: 不得不提的是,startDate和endDate是长变量。我尝试在if条件中添加null检查,也尝试使用longValue()方法,但没有结果。你知道我怎样才能解决这个问题吗?可能是fndBugs端的bug?

  • 我应该写吗 而是为这样的架构做好准备,还是仅仅是我的偏执狂?

  • 问题内容: 在Mysql中,有一个比较运算符,该运算符为null安全:<=>。创建如下这样的准备好的语句时,我在Java程序中使用了它: 现在,我想切换到H2数据库。如何在纯SQL中编写<=>运算符(例如使用IS NULL和IS NOT NULL)?我只想使用stmt.setString操作 一次 。可以多次写入列名。 参考:http : //dev.mysql.com/doc/refman/5.

  • 问题内容: 在Mysql中,有一个比较运算符,该运算符是null安全的:<=>。创建如下这样的准备好的语句时,我在Java程序中使用了它: 现在,我想切换到H2数据库。如何在纯SQL中编写<=>运算符(例如使用IS NULL和IS NOT NULL)?我只想使用stmt.setString操作 一次 。可以多次写入列名。 相关问题是在SQL中获取null == null。但是该答案要求将搜索值写入

  • 我在运行一个简单的helloworld示例drools项目时遇到了以下错误。 代码: 口水代码: