JAVA enumで任意順序Sort

任意の順序をenumで定義してソートします

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

public class EnumSortDemo {

    public static void main(String[] args) {
        EnumSortDemo e = new EnumSortDemo();
        System.out.println(e.sort(e.createTestMap()));
    }

    class F {
        public F(String name, String value) {
            this.name = name;
            this.value = value;
        }

        public String name, value;
    }

    enum Fruit {
        ORANGE, APPLE, BANANAS, CHERRIES;
    }

    public Map<String, F> createTestMap() {
        Map<String, F> fs = new HashMap<String, EnumSortDemo.F>();
        fs.put("1", new F("4", "CHERRIES"));
        fs.put("2", new F("2", "APPLE"));
        fs.put("3", new F("1", "ORANGE"));
        fs.put("4", new F("3", "BANANAS"));
        fs.put("5", new F("4", "CHERRIES"));
        fs.put("6", new F("2", "APPLE"));
        return fs;
    }

    public ArrayList<Entry<String, F>> sort(Map<String, F> fruits) {

        ArrayList<Entry<String, F>> entries = new ArrayList<Entry<String, F>>(
                fruits.entrySet());
        Collections.sort(entries, new Comparator<Object>() {
            @Override
            public int compare(Object o1, Object o2) {
                Fruit fe1 = Fruit.valueOf(((F) ((Entry) o1).getValue()).value);
                Fruit fe2 = Fruit.valueOf(((F) ((Entry) o2).getValue()).value);
                return fe1.compareTo(fe2);
            }
        });
        return entries;
    }
}

定義した任意の順序

enum Fruit {
ORANGE,
APPLE,
BANANAS,
CHERRIES;
}

ソート前

1, CHERRIES
2, APPLE
3, ORANGE
4, BANANAS
5, CHERRIES
6, APPLE

ソート後

3, ORANGE
2, APPLE
6, APPLE
4, BANANAS
1, CHERRIES
5, CHERRIES