package com.levelup.java.util.stream;
import static org.hamcrest.collection.IsIterableContainingInOrder.contains;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import java.util.List;
import java.util.Optional;
import java.util.OptionalDouble;
import java.util.OptionalInt;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;
import org.junit.Test;
import com.google.common.collect.Lists;
/**
* This java example will demonstrate operations on a stream that are considered
* terminal.
*
* @author Justin Musgrove
* @see <a href=
* 'http://www.leveluplunch.com/java/examples/stream-terminal-operations-example/'>Strea
* m terminal operations</a>
*/
public class StreamTerminalExample {
@Test
public void terminal_operation_foreach() {
Stream.of("Hello", "World").forEach(p -> System.out.println(p));
}
@Test
public void terminal_operation_toArray() {
Object[] objects = Stream.of(1, 2).toArray();
assertTrue(objects.length == 2);
}
@Test
public void terminal_operation_reduce() {
int sum = IntStream.of(1, 2, 3, 4).reduce(0, (a, b) -> a + b);
assertEquals(10, sum);
}
@Test
public void terminal_operation_collect() {
Set<String> stringSet = Stream.of("some", "one", "some", "one")
.collect(Collectors.toSet());
assertThat(stringSet, contains("some", "one"));
assertTrue(stringSet.size() == 2);
}
@Test
public void terminal_operation_min() {
OptionalInt minimum = IntStream.of(1, 2, 3).min();
assertEquals(1, minimum.getAsInt());
}
@Test
public void terminal_operation_max() {
OptionalDouble max = Stream.of(1d, 2d, 3d)
.mapToDouble(Double::doubleValue).max();
assertEquals(3, max.getAsDouble(), 0);
}
@Test
public void terminal_operation_count() {
long count = Stream.of("one").count();
assertEquals(1, count);
}
@Test
public void terminal_operation_anymatch() {
boolean lengthOver5 = Stream.of("two", "three", "eighteen").anyMatch(
s -> s.length() > 5);
assertTrue(lengthOver5);
}
@Test
public void terminal_operation_allmatch() {
List<String> cookies = Lists.newArrayList("Peanut Butter Cookies",
"Oatmeal-Raisin Cookies", "Basic Chocolate Chip Cookies");
boolean containCookies = cookies.stream().allMatch(
p -> p.contains("Cookies"));
assertTrue(containCookies);
}
@Test
public void terminal_operation_nonematch() {
boolean noElementEqualTo5 = IntStream.of(1, 2, 3)
.noneMatch(p -> p == 5);
assertTrue(noElementEqualTo5);
}
@Test
public void terminal_operation_findfirst() {
Optional<String> val = Stream.of("one", "two").findFirst();
assertEquals("one", val.get());
}
@Test
public void terminal_operation_findany() {
Optional<String> val = Stream.of("one", "two").findAny();
assertEquals("one", val.get());
}
}