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