java 8在使用Collectors.toMap时处理自定义异常

Mad*_* CM 4 java java-8 java-stream

是否支持在Collectors.toMap中处理自定义异常.我在Collector.toMap中调用一个抛出MyException的方法.它可以在调用函数pupulateValues()中重新抛出吗?为了演示,我使用下面的代码重新抛出MyException但无法通过.我的目标是在main方法中处理MyException.

public static void main(String[] args){
    try {
        pupulateValues();
    } catch (MyException e) {
           // do something
        e.printStackTrace();
    }
}

private static void pupulateValues() throws MyException{
    Map<String,String> map = new HashMap<>();
    map.put("asdf", "asdf");
    map.put("ss", "fff");
    map.put("aaaaaa", "aaaaaaa");

    Map<String,String> map2=map.entrySet().stream().collect(
            Collectors.toMap(entry->entry.getKey(),entry-> {
                try {
                    return getCert(entry.getValue());
                } catch (MyException e) {
                    // TODO Auto-generated catch block
                    throw new MyException();
                }}));

}

static String getCert(String val) throws MyException {
    if(val == null) {
        throw new MyException("Some exception");
    }
    return val;
}
Run Code Online (Sandbox Code Playgroud)

ass*_*ias 6

你有几个选择:

  1. MyException一个未经检查的例外
  2. 包装它: catch (MyException e) { throw new RuntimeException(e); }
  3. 欺骗编译器:

  • 4.使用for循环而不是流 (2认同)