2017-01-26 2 views
0

Sprache: JavaListe sortiert nach Enum dann alphabetisch

Wie kann ich Inhalt eine Arraylist mit dem Verfahren .getType() sortiere und dann alphabetisch getName()?

Dies ist anders, weil ich mit einer bereits alphabetisch geordnete Liste starten und will es auch von Art zu bestellen.

Ein Beispiel für die Liste:

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

Jede Hilfe ist willkommen:

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

Die Liste werden sollte!

Danke.

+0

können Sie einen Code zur Verfügung stellen? – AlexB

+1

Durch eine benutzerdefinierte schreiben [ 'Comparator'] (https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html) und mit der Aufforderung [' Collections.sort (List, Vergleicher) ' ] (https://docs.oracle.com/javase/8/docs/api/java/util/Collections.html#sort-java.util.List-java.util.Comparator-). –

Antwort

-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); 
     } 
    } 
} 
Verwandte Themen