0

在尝试从哈希映射中获取值时,我遇到了诸如“在访问值之前调用“Optional#isPresent()”之类的错误。

代码:

String promolevelname = eventCampiagnResponseObj.getEventCampMap().get(Integer.valueOf(sceobj[18].toString())).keySet().stream().findFirst().get();

请给我一个解决这个问题的方法,谢谢

4

3 回答 3

1

而不是.get()你可以使用.orElse(null)

所以你的代码变成:

String promolevelname = eventCampiagnResponseObj.getEventCampMap().get(Integer.valueOf(sceobj[18].toString())).keySet().stream().findFirst().orElse(null);
于 2020-07-29T16:59:41.797 回答
1

findFirst返回,但如果没有价值Optional,它会抛出。NoSuchElementException因此,您需要检查是否存在值。

Optional<String> value = obj.getOptional()
if (value.isPresent()) {
    value.get();
}

在您的情况下,它应该如下所示:

Optional<String> optionalValue = eventCampiagnResponseObj.getEventCampMap().get(Integer.valueOf(sceobj[18].toString())).keySet().stream().findFirst();
if (optionalValue .isPresent()) {
    String promolevelname  = optionalValue.get();
}
于 2020-07-29T15:27:59.803 回答
1

它表明代码行

eventCampiagnResponseObj.getEventCampMap().get(Integer.valueOf(sceobj[18].toString())).keySet().stream().findFirst()

正在返回一个 Optional 对象,您应该检查它是否不是“null”,然后才对其执行 get()。

一种可能的解决方案是:

Optional<String> promolevelnameOpt = eventCampiagnResponseObj.getEventCampMap().get(Integer.valueOf(sceobj[18].toString())).keySet().stream().findFirst().get();
if (promolevelnameOpt.isPresent()) {
  promolevelname = promolevelnameOpt.get();
} else {
  // promolevelnameOpt contains null
}
于 2020-07-29T15:29:23.340 回答