content: package com.annimon.stream.streamtests;
  
  import com.annimon.stream.Stream;
  import com.annimon.stream.Student;
  import com.annimon.stream.Students;
  import com.annimon.stream.function.Function;
  import java.util.Arrays;
  import java.util.List;
  import org.junit.Test;
  import static com.annimon.stream.test.hamcrest.StreamMatcher.assertElements;
  import static org.hamcrest.Matchers.contains;
  
  public final class SortByTest {
  
      @Test
      public void testSortByStringLength() {
          Stream.of("This", "is", "a", "test")
                  .sortBy(new Function<String, Integer>() {
  
                      @Override
                      public Integer apply(String value) {
                          return value.length();
                      }
                  })
                  .custom(assertElements(contains(
                          "a", "is", "This", "test"
                  )));
      }
  
      @Test
      public void testSortByStudentName() {
          final List<Student> students = Arrays.asList(
                  Students.STEVE_CS_4,
                  Students.MARIA_ECONOMICS_1,
                  Students.VICTORIA_CS_3,
                  Students.JOHN_CS_2
          );
          Stream.of(students)
                  .sortBy(new Function<Student, String>() {
                      @Override
                      public String apply(Student student) {
                          return student.getName();
                      }
                  })
                  .custom(assertElements(contains(
                          Students.JOHN_CS_2,
                          Students.MARIA_ECONOMICS_1,
                          Students.STEVE_CS_4,
                          Students.VICTORIA_CS_3
                  )));
      }
  
      @Test
      public void testSortByStudentCourseDescending() {
          final List<Student> students = Arrays.asList(
                  Students.STEVE_CS_4,
                  Students.MARIA_ECONOMICS_1,
                  Students.VICTORIA_CS_3,
                  Students.JOHN_CS_2
          );
          Stream.of(students)
                  .sortBy(new Function<Student, Integer>() {
                      @Override
                      public Integer apply(Student student) {
                          return -student.getCourse();
                      }
                  })
                  .custom(assertElements(contains(
                          Students.STEVE_CS_4,
                          Students.VICTORIA_CS_3,
                          Students.JOHN_CS_2,
                          Students.MARIA_ECONOMICS_1
                  )));
      }
  }
  