2017-08-18 64 views
-3

如何對具有兩種不同類型對象列表屬性的對象進行排序。這兩個列表都是不同對象的類型。如何對具有共同名稱屬性的兩個不同對象列表進行排序

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

public class Group { 
    private String groupName; 
} 

public class Person { 
    private String personName; 
} 

有沒有辦法對這兩個列表進行排序並獲得將根據名稱排序的組合結果。

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

就扔了這一點,還有......爲什麼? –

+3

創建「組」和「人」共享的界面,例如'Named',表示一個'.getName()'方法。然後,創建一個「Comparator 」實例。或者'命名'擴展'可比較<?擴展Named>並且使Group和Person可以相互比較。正如Joe C所暗示的,這些都不是好模式(爲什麼它們應該被歸類爲類似的概念?),但是很容易做到。 – dimo414

回答

1

試試這個:

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; 
    } 
} 

然後使用它:

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

輸出:

組名:亞歷克斯

個人onName:鮑勃

組名稱:christan

組名稱:丹

PERSONNAME:吉

相關問題