alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

Groovy example source code file (SortTest.groovy)

This example Groovy source code file (SortTest.groovy) is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Java - Groovy tags/keywords

abar, abar, afoo, afoo, chris, expando, expando, ignorecasecomparator, james, joe, string, the, the, z

The Groovy SortTest.groovy source code

package groovy

/** 
 * @author <a href="mailto:james@coredevelopers.net">James Strachan
 * @version $Revision: 20066 $
 */
class SortTest extends GroovyTestCase {

    // GROOVY-1956
    void testSortWithNull() {
        // normal case, should sort in place and return result
        def x = [1, 2, 3, 1, 2, 3, null, 'a', null]
        assert x.is(x.sort())
        def y = x.sort()
        assert (y == x && x == [null, null, 1, 1, 2, 2, 3, 3, 'a'])

        // transitivity
        x = [1, 2, 3, 1, 2, 3, null, 'a', null]
        x.unique().sort()
        y = [1, 2, 3, 1, 2, 3, null, 'a', null]
        y.sort().unique()
        assert (x == y && y == [null, 1, 2, 3, 'a'])
    }

    // GROOVY-1956
    void testSortWithNullUsingOrderBy() {
        def x = [1, 2, 'Z', 'a', null]
        def y =  x.sort()
        assert y == [null, 1, 2, 'Z', 'a']
        def z = x.sort{ it?.respondsTo('toUpperCase') ? it?.toUpperCase() : it }
        assert z == [null, 1, 2, 'a', 'Z']
    }

    void testSortWithOrderBy() {
        def list = getPeople()
        def order = new OrderBy( { it.cheese } )
        list.sort(order)
        assert list[0].name == 'Joe'
        assert list[-1].name == 'Chris'
        assert list.name == ['Joe', 'Bob', 'James', 'Chris']
    }
    
    void testSortWithClosure() {
        def list = getPeople()
        list.sort { it.cheese }
        assert list.name == ['Joe', 'Bob', 'James', 'Chris']
    }

    void testArraySort() {
        def s = "The quick brown fox jumped over the lazy dog"
        def words = s.split()
        assert words.sort() == ['The', 'brown', 'dog', 'fox', 'jumped', 'lazy', 'over', 'quick', 'the'] as String[]
        assert words.sort(new IgnoreCaseComparator()) == ['brown', 'dog', 'fox', 'jumped', 'lazy', 'over', 'quick', 'The', 'the'] as String[]
        words = s.split() // back to a known order
        assert words.sort{ it.size() } == ['The', 'fox', 'the', 'dog', 'over', 'lazy', 'quick', 'brown', 'jumped'] as String[]
    }

    void testSortClassHierarchy() {
        def aFooList = [
                new AFoo(5),
                new AFoo(7),
                new ABar(4),
                new ABar(6)
                ]
        def sorted = aFooList.sort()
        assert sorted.collect{ it.class } == [ABar, AFoo, ABar, AFoo]
        assert sorted.collect{ it.key } == (4..7).toList()
    }

    def getPeople() {
        def answer = []
        answer << new Expando(name:'James', cheese:'Edam', location:'London')
        answer << new Expando(name:'Bob', cheese:'Cheddar', location:'Atlanta')
        answer << new Expando(name:'Chris', cheese:'Red Leicester', location:'London')
        answer << new Expando(name:'Joe', cheese:'Brie', location:'London')
        return answer
    }

}

class AFoo implements Comparable {
    int key
    AFoo(int key) { this.key = key }
    int compareTo(Object rhs) { key - rhs.key }
    String toString() { this.class.name + ": " + key }
}

class ABar extends AFoo {
    public ABar(int x) {super(x)}
}

class IgnoreCaseComparator implements Comparator {
    public int compare(Object o1, Object o2) {
        return o1.toUpperCase() <=> o2.toUpperCase()
    }
}

Other Groovy examples (source code examples)

Here is a short list of links related to this Groovy SortTest.groovy source code file:

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.