diff --git a/src/main/java/util/FileUtils.java b/src/main/java/util/FileUtils.java index 69cb174d..53943322 100644 --- a/src/main/java/util/FileUtils.java +++ b/src/main/java/util/FileUtils.java @@ -36,7 +36,9 @@ public static File fileOf(File f, boolean canonical) throws Exception { } public static Set fromStrings(Collection s) { - return s.stream().map(File::new).collect(Collectors.toSet()); + return s.stream().map(File::new).collect( + Collectors.toCollection(LinkedHashSet::new) + ); } public static String toMultiPath(Collection paths) { diff --git a/src/test/java/util/FileUtilsTest.java b/src/test/java/util/FileUtilsTest.java new file mode 100644 index 00000000..809cc609 --- /dev/null +++ b/src/test/java/util/FileUtilsTest.java @@ -0,0 +1,28 @@ +/* + * This is free and unencumbered software released into the public domain. + * See UNLICENSE. + */ +package util; + +import com.google.common.collect.Lists; +import junit.framework.TestCase; +import org.junit.Test; + +import java.io.File; +import java.util.List; +import java.util.Set; + +import static org.junit.Assert.assertEquals; + +public class FileUtilsTest { + @Test + public void fromStrings_should_preserve_insertion_order(){ + List expected = Lists.newArrayList("5.jar", "23.jar", "56.jar", "2.jar", "48.jar", "99.jar", "1234.jar"); + Set files = FileUtils.fromStrings(expected); + List actual = Lists.newArrayList(); + for (File file : files) { + actual.add(file.getName()); + } + assertEquals(actual, expected); + } +}