首页 > 解决方案 > 使用 Optional 而不是嵌套 if else 的 Lambda 函数

问题描述

Optional<String> myData;
Set<String> mySet;
if(myData.isPresent()) {
    if(myData.get().contains(“testValue”)) {
        mySet.add(“somedata”);
    }
}
if(!myData.isPresent()) {
    mySet.add(“someotherdata”);
}

我有这样的场景。我在哪里嵌套了 if-else 块,我需要使用 lambda 函数将其转换为 Java8 映射。我怎样才能做到这一点?

标签: javalambdaoptional

解决方案


这将重现您之前的结果,但略有改变。我相信流解决方案既不必要也不可取。以下将:

  • 导致empty set如果数据存在但不存在testValue
  • someotherdata如果数据不存在,则导致包含的集合
  • 导致包含somedata数据是否存在且匹配的集合testValue
String result = myData.isPresent() ?
        (myData.get().contains("testValue") ? "somedata" : "") :
        "someotherdata";

if (!result.isBlank()) {
    mySet.add(result);
}

推荐阅读