相关疑难解决方法(0)

以功能方式处理异常的更好方法

在Java 8中使用FP习惯用法时,异常(尤其是已检查的异常)会严重中断程序逻辑的流程.以下是一个任意示例:

String s1 = "oeu", s2 = "2";
Stream.of(s1, s2).forEach(s -> 
    System.out.println(Optional.of(s).map(Integer::parseInt).get()));
Run Code Online (Sandbox Code Playgroud)

当不可解析的字符串出现异常时,上面的代码会中断.但是说我只想用默认值替换它,就像我可以用Optional:

Stream.of(s1, s2).forEach(s -> 
   System.out.println(Optional.of(s)
                              .map(Integer::parseInt)
                              .orElse(-1)));
Run Code Online (Sandbox Code Playgroud)

当然,这仍然失败因为Optional只处理nulls.我想要的东西如下:

Stream.of(s1, s2).forEach(s ->
    System.out.println(
        Exceptional.of(s)
                   .map(Integer::parseInt)
                   .handle(NumberFormatException.class, swallow())
                   .orElse(-1)));
Run Code Online (Sandbox Code Playgroud)

注意:这是一个自我回答的问题.

java java-8 java-stream

58
推荐指数
4
解决办法
9359
查看次数

标签 统计

java ×1

java-8 ×1

java-stream ×1