package com.levelup.java.array; import static org.junit.Assert.assertArrayEquals; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.stream.IntStream; import org.apache.log4j.Logger; import org.junit.Test; import com.google.common.collect.Ordering; import com.google.common.primitives.Ints; /** * This java example will demonstrate sorting numeric * and string array * * @author Justin Musgrove * @see <a href='http://www.leveluplunch.com/java/examples/sort-array/'>Sort Array</a> * */ public class SortArray { private static final Logger logger = Logger.getLogger(SortArray.class); @Test public void sort_numeric_array_in_java () { int[] uwConferenceTitles = { 1896, 2011, 1901, 1912, 1952, 1959, 1962, 1999, 1897, 1906, 1993, 1998, 2010, 2012}; Arrays.sort(uwConferenceTitles); logger.info(Arrays.toString(uwConferenceTitles)); assertArrayEquals(new int[] { 1896, 1897, 1901, 1906, 1912, 1952, 1959, 1962, 1993, 1998, 1999, 2010, 2011, 2012}, uwConferenceTitles); } @Test public void sort_numeric_array_decending_in_java () { Integer[] uwConferenceTitles = { 1896, 2011, 1901, 1912, 1952, 1959, 1962, 1999, 1897, 1906, 1993, 1998, 2010, 2012}; Arrays.sort(uwConferenceTitles, Collections.reverseOrder()); logger.info(Arrays.toString(uwConferenceTitles)); assertArrayEquals(new Integer[] { 2012, 2011, 2010, 1999, 1998, 1993, 1962, 1959, 1952, 1912, 1906, 1901, 1897, 1896}, uwConferenceTitles); } @Test public void sort_string_array_in_java () { String[] wiStateParks = { "Mill Bluff State Park", "Amnicon Falls State Park", "Wyalusing State Park", "Big Foot Beach State Park", "Willow River State Park", "Roche-A-Cri State Park" }; Arrays.sort(wiStateParks); logger.info(Arrays.toString(wiStateParks)); assertArrayEquals(new String[] { "Amnicon Falls State Park", "Big Foot Beach State Park", "Mill Bluff State Park", "Roche-A-Cri State Park", "Willow River State Park", "Wyalusing State Park"}, wiStateParks); } @Test public void sort_numeric_array_in_java8 () { int[] uwConferenceTitles = { 1896, 2011, 1901, 1912, 1952, 1959, 1962, 1999, 1897, 1906, 1993, 1998, 2010, 2012}; int[] sortedTitles = IntStream.of(uwConferenceTitles).sorted().toArray(); logger.info(Arrays.toString(uwConferenceTitles)); assertArrayEquals(new int[] { 1896, 1897, 1901, 1906, 1912, 1952, 1959, 1962, 1993, 1998, 1999, 2010, 2011, 2012}, sortedTitles); } @Test public void sort_numeric_array_decending_in_java8 () { Integer[] uwConferenceTitles = { 1896, 2011, 1901, 1912, 1952, 1959, 1962, 1999, 1897, 1906, 1993, 1998, 2010, 2012}; Comparator<Integer> normal = Integer::compare; Comparator<Integer> reversed = normal.reversed(); Arrays.sort(uwConferenceTitles, reversed); assertArrayEquals(new Integer[] { 2012, 2011, 2010, 1999, 1998, 1993, 1962, 1959, 1952, 1912, 1906, 1901, 1897, 1896}, uwConferenceTitles); } @Test public void sort_string_array_in_java8 () { String[] wiStateParks = { "Mill Bluff State Park", "Amnicon Falls State Park", "Wyalusing State Park", "Big Foot Beach State Park", "Willow River State Park", "Roche-A-Cri State Park" }; Object[] sorted = Arrays.stream(wiStateParks).sorted().toArray(); logger.info(Arrays.toString(sorted)); assertArrayEquals(new String[] { "Amnicon Falls State Park", "Big Foot Beach State Park", "Mill Bluff State Park", "Roche-A-Cri State Park", "Willow River State Park", "Wyalusing State Park"}, sorted); } @Test public void sort_string_array_in_java8_by_length () { String[] wiStateParks = { "Mill Bluff State Park", "Amnicon Falls State Park", "Wyalusing State Park", "Big Foot Beach State Park", "Willow River State Park", "Roche-A-Cri State Park" }; Arrays.sort(wiStateParks, (s1, s2) -> s1.length() - s2.length()); logger.info(Arrays.toString(wiStateParks)); //or Arrays.sort(wiStateParks, (String s1, String s2) -> s1.length() - s2.length()); assertArrayEquals(new String[] { "Wyalusing State Park", "Mill Bluff State Park", "Roche-A-Cri State Park", "Willow River State Park", "Amnicon Falls State Park", "Big Foot Beach State Park" }, wiStateParks); } @Test public void sort_numeric_array_decending_in_java_with_guava () { Integer[] uwConferenceTitles = { 1896, 2011, 1901, 1912, 1952, 1959, 1962, 1999, 1897, 1906, 1993, 1998, 2010, 2012}; Arrays.sort(uwConferenceTitles, Ordering.natural().reverse()); logger.info(Arrays.toString(uwConferenceTitles)); assertArrayEquals(new Integer[] { 2012, 2011, 2010, 1999, 1998, 1993, 1962, 1959, 1952, 1912, 1906, 1901, 1897, 1896}, uwConferenceTitles); } @Test public void sort_string_array_in_java_with_guava_by_length () { Ordering<String> byLengthOrdering = new Ordering<String>() { public int compare(String left, String right) { return Ints.compare(left.length(), right.length()); } }; String[] wiStateParks = { "Mill Bluff State Park", "Amnicon Falls State Park", "Wyalusing State Park", "Big Foot Beach State Park", "Willow River State Park", "Roche-A-Cri State Park" }; Arrays.sort(wiStateParks, byLengthOrdering); logger.info(Arrays.toString(wiStateParks)); assertArrayEquals(new String[] { "Wyalusing State Park", "Mill Bluff State Park", "Roche-A-Cri State Park", "Willow River State Park", "Amnicon Falls State Park", "Big Foot Beach State Park" }, wiStateParks); } }