public static <T, R> Iterable<R> map(Iterable<T> iterable, Function<T, R> mapper) {
        return () -> map(iterable.iterator(), mapper);
    }
@Test
    public void testElementsConverted_whenIterableMapped() {
        Iterable<String> strings = IterableUtil.map(numbers, Object::toString);

        Iterator<String> iter = strings.iterator();
        for (Integer i : numbers) {
            assertEquals(i.toString(), iter.next());
        }
    }