package com.shekhargulati.java8_tutorial.ch06;
import com.shekhargulati.java8_tutorial.domain.Task;
import com.shekhargulati.java8_tutorial.domain.TaskType;
import org.junit.Test;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import static java.util.function.Function.identity;
import static java.util.stream.Collectors.toMap;
import static org.hamcrest.CoreMatchers.*;
import static org.hamcrest.collection.IsMapContaining.hasEntry;
import static org.junit.Assert.assertThat;
public class MapExampleTest {
@Test
public void shouldCreateMapFromTaskList() throws Exception {
Task t1 = new Task("Write blog on Java 8 Map improvements", TaskType.BLOGGING);
Task t2 = new Task("Write factorial program in Java 8", TaskType.CODING);
List<Task> tasks = Arrays.asList(t1, t2);
Map<String, Task> taskIdToTaskMap = tasks.stream().collect(toMap(Task::getId, identity()));
assertThat(taskIdToTaskMap, hasEntry(notNullValue(), equalTo(t1)));
assertThat(taskIdToTaskMap, hasEntry(notNullValue(), equalTo(t2)));
}
@Test
public void shouldCreateLinkedMapFromTaskList() throws Exception {
Task t1 = new Task("Write blog on Java 8 Map improvements", TaskType.BLOGGING);
Task t2 = new Task("Write factorial program in Java 8", TaskType.CODING);
List<Task> tasks = Arrays.asList(t1, t2);
Map<String, Task> taskIdToTaskMap = tasks.stream().collect(toMap(Task::getId, identity(), (k1, k2) -> k1, LinkedHashMap::new));
assertThat(taskIdToTaskMap, instanceOf(LinkedHashMap.class));
assertThat(taskIdToTaskMap, hasEntry(notNullValue(), equalTo(t1)));
assertThat(taskIdToTaskMap, hasEntry(notNullValue(), equalTo(t2)));
}
@Test
public void shouldHandleTaskListWithDuplicates() throws Exception {
Task t1 = new Task("1", "Write blog on Java 8 Map improvements", TaskType.BLOGGING);
Task t2 = new Task("1", "Write factorial program in Java 8", TaskType.CODING);
List<Task> tasks = Arrays.asList(t1, t2);
Map<String, Task> taskIdToTaskMap = tasks.stream().collect(toMap(Task::getId, identity(), (k1, k2) -> k2));
assertThat(taskIdToTaskMap, hasEntry(notNullValue(), equalTo(t2)));
}
}