@Override
    public R next() {
        do {
            R r = currentTraverser.next();
            if (r != null) {
                return r;
            }
            currentTraverser = nextTraverser();
        } while (currentTraverser != NULL_TRAVERSER);
        return null;
    }
@Test
    public void when_flatMapToNullTraverser_then_skipOverToNext() {
        // This test would fail, if the internal FlatMappingTraverser.NULL_TRAVERSER instance
        // would be the same (as per == operator) as the instance returned by Traversers.empty()
        FlatMappingTraverser<Integer, String> trav =
                new FlatMappingTraverser<>(traverseItems(1, 2, 3), item -> item != 3 ? empty() : singleton("a"));

        assertEquals("a", trav.next());
        assertNull(trav.next());
        assertNull(trav.next());
    }