Проверенные исключения, выбрасываемые из лямбда-выражений

Не могли бы вы объяснить, почему проверенные исключения должны быть пойманы из лямбда-выражений? Другими словами, почему следующий код не компилируется ...

public void doSomething(ObjectInputStream istream) throws IOException {
  // The read method throws an IOException.
  IntStream.range(0, 10).forEach(i -> someList.add(read(istream)));
}

а этот будет?

public void doSomething(ObjectInputStream istream) throws IOException {
  IntStream.range(0, 10).forEach(i -> {
    try {
      // The read method throws an IOException.
      someList.add(read(istream));
    }
    catch (IOException ioe) {
      // Callee has to handle checked exception, not caller.
    }
  });
}

Кажется, что вызываемый теперь должен обрабатывать любые проверенные исключения, которые выдают, а не вызывающий.

Ответы на вопрос(1)

Ваш ответ на вопрос