如何使用java8 lambda表达式抛出自定义检查的异常?

前端之家收集整理的这篇文章主要介绍了如何使用java8 lambda表达式抛出自定义检查的异常?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > Java 8: Lambda-Streams,Filter by Method with Exception13个
我有下面的代码.
  1. private static void readStreamWithjava8() {
  2.  
  3. Stream<String> lines = null;
  4.  
  5. try {
  6. lines = Files.lines(Paths.get("b.txt"),StandardCharsets.UTF_8);
  7. lines.forEachOrdered(line -> process(line));
  8. } catch (IOException e) {
  9. e.printStackTrace();
  10. } finally {
  11. if (lines != null) {
  12. lines.close();
  13. }
  14. }
  15. }
  16.  
  17. private static void process(String line) throws MyException {
  18. // Some process here throws the MyException
  19. }

这里我的进程(String line)方法抛出已检查的异常,我从lambda中调用方法.此时需要从readStreamWithjava8()方法抛出MyException而不抛出RuntimeException.

我怎么能用java8做到这一点?

解决方法

简短的回答是,你做不到.这是因为forEachOrdered接受了Consumer,并且未声明Consumer.accept会抛出任何异常.

解决方法是做类似的事情

  1. List<MyException> caughtExceptions = new ArrayList<>();
  2.  
  3. lines.forEachOrdered(line -> {
  4. try {
  5. process(line);
  6. } catch (MyException e) {
  7. caughtExceptions.add(e);
  8. }
  9. });
  10.  
  11. if (caughtExceptions.size() > 0) {
  12. throw caughtExceptions.get(0);
  13. }

但是,在这些情况下,我通常会在process方法中处理异常,或者使用for-loops以旧式方式处理异常.

猜你在找的Java相关文章