package com.insightfullogic.java8.examples.chapter5;
import org.junit.Ignore;
import org.junit.Test;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import static java.util.Arrays.asList;
import static java.util.stream.Collectors.toList;
import static junit.framework.Assert.assertEquals;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.hasItem;
public class EncounterOrderTest {
@Test
public void listToStream() {
// BEGIN LIST_TO_STREAM
List<Integer> numbers = asList(1, 2, 3, 4);
List<Integer> sameOrder = numbers.stream()
.collect(toList());
assertEquals(numbers, sameOrder);
// END LIST_TO_STREAM
}
// NB: to actually get this to fail you need to reverse the order of the numbers.
@Ignore
@Test
public void hashSetToStream() {
// BEGIN HASHSET_TO_STREAM
Set<Integer> numbers = new HashSet<>(asList(4, 3, 2, 1));
List<Integer> sameOrder = numbers.stream()
.collect(toList());
// This may not pass
assertEquals(asList(4, 3, 2, 1), sameOrder);
// END HASHSET_TO_STREAM
}
@Test
public void hashSetToStreamSorted() {
// BEGIN HASHSET_TO_STREAM_SORTED
Set<Integer> numbers = new HashSet<>(asList(4, 3, 2, 1));
List<Integer> sameOrder = numbers.stream()
.sorted()
.collect(toList());
assertEquals(asList(1, 2, 3, 4), sameOrder);
// END HASHSET_TO_STREAM_SORTED
}
@Test
public void toStreamMapped() {
// BEGIN TO_STREAM_MAPPED
List<Integer> numbers = asList(1, 2, 3, 4);
List<Integer> stillOrdered = numbers.stream()
.map(x -> x + 1)
.collect(toList());
// Reliable encounter ordering
assertEquals(asList(2, 3, 4, 5), stillOrdered);
Set<Integer> unordered = new HashSet<>(numbers);
List<Integer> stillUnordered = unordered.stream()
.map(x -> x + 1)
.collect(toList());
// Can't assume encounter ordering
assertThat(stillUnordered, hasItem(2));
assertThat(stillUnordered, hasItem(3));
assertThat(stillUnordered, hasItem(4));
assertThat(stillUnordered, hasItem(5));
// END TO_STREAM_MAPPED
}
}