按枚号排序列表,然后按字母顺序排序

时间:2017-01-26 04:41:53

标签: java

语言:Java

如何使用方法.getType()对ArrayList的内容进行排序,然后使用getName()按字母顺序排序?

这是不同的,因为我从一个已按字母顺序排列的列表开始,并希望按类型排序。

列表示例:

0: Type=Grass Name=GrassNameExampleHere 1: Type=Stone Name=StoneSomethingElse 2: Type=Stone Name=StoneWhatever 3: Type=Grass Name=StoneWhatever

列表应该成为:

0: Type=Grass Name=GrassNameExampleHere 1: Type=Grass Name=StoneWhatever 2: Type=Stone Name=StoneSomethingElse 3: Type=Stone Name=StoneWhatever

感谢任何帮助!

感谢。

1 个答案:

答案 0 :(得分:-1)

public class Item {
    private String name;
    private Type type;

    public Item() {
    }

    public Item(String name, Type type) {
        this.name = name;
        this.type = type;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Type getType() {
        return type;
    }

    public void setType(Type type) {
        this.type = type;
    }

    @Override
    public String toString() {
        return "Item{" +
                "name='" + name + '\'' +
                ", type=" + type +
                '}';
    }
}

public enum Type {
    STONE,
    GRASS
}

public class ItemComparator implements Comparator<Item> {
    @Override
    public int compare(Item o1, Item o2) {
        String name1 = o1.getName();
        String name2 = o2.getName();

        Type type1 = o1.getType();
        Type type2 = o2.getType();

        int i = type1.name().compareTo(type2.name());
        if (i != 0) return i;

        i = name1.compareTo(name2);
        return i;
    }
}

public class Main {
    public static void main(String[] args) {
        Item item0 = new Item("StoneWhatever", Type.STONE);
        Item item1 = new Item("StoneSomethingElse", Type.STONE);
        Item item2 = new Item("StoneWhatever", Type.GRASS);
        Item item3 = new Item("GrassNameExampleHere", Type.GRASS);

        List<Item> itemList = new ArrayList<>();
        itemList.add(item0);
        itemList.add(item1);
        itemList.add(item2);
        itemList.add(item3);

        Collections.sort(itemList, new ItemComparator());
        for (Item item : itemList) {
            System.out.println(item);
        }
    }
}