2017-08-18 3 views
-3

So sortieren Sie Objekte, die zwei verschiedene Arten von Objektlisteneigenschaften aufweisen. Beide Listen sind verschiedene Arten von Objekten.So sortieren Sie zwei verschiedene Objektlisten mit gemeinsamen Namen

public class Member { 
    private List<Group> groups; 
    private List<Person> persons; 
} 

public class Group { 
    private String groupName; 
} 

public class Person { 
    private String personName; 
} 

Gibt es Möglichkeit, diese zwei Liste zu sortieren und kombiniertes Ergebnis zu erhalten, das basierend auf dem Namen sortiert wird.

expected result 
groupName : alex 
personName : bob 
groupName: christan 
groupName: Dan 
perosnName: Kat 
+0

Gerade dies wirft da draußen ... warum? –

+3

Erstellen Sie eine Schnittstelle, die sowohl "Gruppe" als auch "Person" teilen, z. 'Named', die eine' .getName() 'Methode verfügbar macht. Dann erstellen Sie einfach eine 'Comparator ' Instanz. Alternativ kann "Benannt" "Vergleichbar" erweitern? extends Named> 'und macht' Group' und 'Person' miteinander vergleichbar. Wie 'Joe C' andeutet, kann keines davon ein gutes Muster sein (warum sollten sie als ähnliche Konzepte gruppiert werden?), Aber es ist einfach genug zu tun. – dimo414

Antwort

1

Try this:

abstract class BaseClass implements Comparable{ // you could name this class as you want 
    protected String name; 

    @Override 
    public int compareTo(Object o) { 
     return this.name.compareToIgnoreCase(((BaseClass)o).name); 
    } 
} 

class Group extends BaseClass{ 
    public Group(String name) { 
     this.name = name; 
    } 

    @Override 
    public String toString() { 
     return "groupName : " + name; 
    } 
} 

class Person extends BaseClass{ 
    public Person(String name) { 
     this.name = name; 
    } 

    @Override 
    public String toString() { 
     return "personName : " + name; 
    } 
} 

Dann, es zu benutzen:

public class Main { 

    public static void main(String[] args) { 

     List<Group> groups = new ArrayList<>(); 
     groups.add(new Group("alex")); 
     groups.add(new Group("christan")); 
     groups.add(new Group("Dan")); 

     List<Person> persons = new ArrayList<>(); 
     persons.add(new Person("bob")); 
     persons.add(new Person("Kat")); 

     List<BaseClass> members = new ArrayList<>(); 

     members.addAll(groups); 
     members.addAll(persons); 
     members.sort(BaseClass::compareTo); 

     members.forEach(System.out::println); 
    } 
} 

Ausgang:

Gruppenname: alex

pers onName: bob

Gruppenname: christan

Gruppenname: Dan

person: Kat

Verwandte Themen