package com.annimon.stream.longstreamtests; import com.annimon.stream.LongStream; import com.annimon.stream.function.LongFunction; import java.util.NoSuchElementException; import org.junit.Test; import static com.annimon.stream.test.hamcrest.LongStreamMatcher.assertElements; import static org.hamcrest.Matchers.arrayContaining; public final class FlatMapTest { @Test public void testFlatMap() { LongFunction<LongStream> twicer = new LongFunction<LongStream>() { @Override public LongStream apply(long value) { return LongStream.of(value, value); } }; LongStream.of(10L, 20L, 30L) .flatMap(twicer) .custom(assertElements(arrayContaining( 10L, 10L, 20L, 20L, 30L, 30L ))); LongStream.of(10L, 20L, -30L) .flatMap(new LongFunction<LongStream>() { @Override public LongStream apply(long value) { if (value < 0) return LongStream.of(value); return null; } }) .custom(assertElements(arrayContaining( -30L ))); LongStream.of(10L, 20L, -30L) .flatMap(new LongFunction<LongStream>() { @Override public LongStream apply(long value) { if (value < 0) return LongStream.empty(); return LongStream.of(value); } }) .custom(assertElements(arrayContaining( 10L, 20L ))); } @Test(expected = NoSuchElementException.class) public void testFlatMapIterator() { LongStream.empty().flatMap(new LongFunction<LongStream>() { @Override public LongStream apply(long value) { return LongStream.of(value); } }).iterator().nextLong(); } }