methods that throws checked exceptions in a lambda block

Paul Sandoz paul.sandoz at
Wed Feb 12 16:48:40 UTC 2014

On Feb 12, 2014, at 4:05 PM, Wang Weijun < at> wrote:

> This line does not compile
>  Files.list(Paths.get("/secret")).forEach(x -> Files.write(x, new byte[Files.size(x)]);
> because Files.write() and Files.size() throw IOE. Then what's the best way to make it work?

It depends...

Sometimes i will shuffle things under a method (static one if there are no captures and use a method ref).

If i get *really* fed up i have been know to write stuff like the following:

    private static interface S<T, E extends IOException> {
        T apply() throws E;

    private static <T, E extends IOException> T r(S<T, E> s) {
        try {
            return s.apply();
        catch (IOException t) {
            throw new UncheckedIOException(t);


> (I find some old threads on this on lambda-dev. Maybe we have a recommended way now?)

More information about the core-libs-dev mailing list