package java8.chapter_01.exercises;
import static java.util.Comparator.comparing;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.arrayContaining;
import java.io.File;
import java.util.Arrays;
import java.util.Comparator;
import org.hamcrest.Matchers;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
public class Exercise_04 {
@Rule
public final TemporaryFolder folder = new TemporaryFolder();
@Test
public void chainComparators() throws Exception {
folder.newFile("a");
folder.newFile("z");
folder.newFolder("1");
folder.newFolder("2");
File[] files = folder.getRoot().listFiles();
Comparator<File> compareByType = (o1, o2) -> {
boolean o1IsDirectory = o1.isDirectory();
boolean o2IsDirectory = o2.isDirectory();
if (o1IsDirectory == o2IsDirectory) {
return 0;
}
if (o1IsDirectory) {
return -1;
}
return 1;
};
Arrays.sort(files, compareByType.thenComparing(comparing(File::getName)));
assertThat(files, Matchers.arrayContaining(FileTypeSafeMatcher.fileNamed("1"), FileTypeSafeMatcher.fileNamed("2"), FileTypeSafeMatcher.fileNamed("a"), FileTypeSafeMatcher.fileNamed("z")));
}
}