Java 8 可选解析字符串为 int 或 if 为 null 并设置默认空字符串

时间:2021-03-17 20:01:26

标签: java lambda java-8

我正在尝试将 string 解析为 int,如果字符串为 string 和 lambda,则默认设置为空 null。这是我的代码:

Map<String, Object> myMap = new HashMap<>();
String myString = "Some String"; //can be also null

myMap.put("myData", Optional.ofNullable(myString).map(Integer::parseInt).orElse(""));
...

问题是我应该将 Integer 中的 .orElse() 设置为默认值,但我需要设置并清空 string。我知道我可以像这样用 java 做到这一点:

myMap.put("myData", StringUtils.isEmpty(myString) ? "" : Integer.parseInt(myString));

但我想用 lambda 来做到这一点。

有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

这相当简单。我们只需要告诉流管道将 Integer 视为 Object,而不是 Integer。哦,是的,那么字符串需要在它不为空时保存一个数字。

    Map<String, Object> myMap = new HashMap<>();
    String myString = "53"; //can be also null

    myMap.put("myData",
            Optional.ofNullable(myString)
                    .map(s -> (Object) Integer.valueOf(s))
                    .orElse(""));
    
    System.out.println(myMap);

输出:

<块引用>

{myData=53}

如果我改变这一行:

    String myString = null; //can be also non-null
<块引用>

{myData=}

您不需要使用 Optional,有些人希望您不要使用。这是一个没有它的变体:

    myMap.put("myData", myString == null ? "" : Integer.valueOf(myString));

结果和之前一样。你同意它更简单吗?

相关问题