尝试从 hashmap 获取值时在 eclipse 中出现 sonarlint 错误

Getting sonarlint error in eclipse while trying to get value from hashmap

我在尝试从 hashmap 获取值时收到类似 “在访问值之前调用“Optional#isPresent()””这样的错误

代码:

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

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

findFirst returns 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();
}

提示代码行

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
}

您可以使用 .orElse(null)

而不是 .get()

因此您的代码变为:

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