2015-01-26 75 views
0

我正在尋找一種很好的方法,可以按多個類屬性對對象列表進行分組。 Google guava library提供了一個功能,可以通過一個屬性進行分組。我還沒有找到一個實用程序,但它提供了我正在尋找的東西。按多個屬性對對象列表進行分組

見下文。我已經將分組屬性封裝到它自己的類Grouping中。但是,如果存在更好的解決方案,則這不是必需的。

一個包含分組屬性的類。

Class Grouping{ 

private String key1; 
private String key2; 
private String key3; 

//getters, setters 

} 

表示需要分組的類型。

Class Groupable{ 

private Grouping grouping; 

private String x; 
private String y; 
private String z; 

// getters, setters 

} 

我需要的是一個包含作爲關鍵的映射,具有唯一鍵集合的Groupable對象。並將Groupable對象列表作爲相應的分組項目。

Map<Grouping, List<Groupable>> groupings; 

任何和所有的建議歡迎!

+0

您鏈接的方法完全符合您的要求:您傳遞將Groupable轉換爲分組的函數,它執行其他所有操作。當然,分組需要正確實現hashCode()和equals()。哪裏有問題?請注意,它使用簡單的Map很容易。 – 2015-01-26 22:00:18

+0

好的。我想我需要實現我自己的equals()。這就是我所缺少的,因爲默認實現是尋找對象相等,而我想在對象屬性中建立平等。謝謝。 – Angad 2015-01-26 22:01:21

+0

不要忘記實現一個與你的equals()一致的'hashCode()'。 – 2015-01-26 22:02:42

回答

0

基於@JBNizet和@ JohnBollinger的評論回答我自己的問題。

我使用Eclipse IDE,所以我需要做的就是去Source - >'生成hashCode()和equals()..',並調用我的Grouping類中的相同操作,以包含覆蓋實現中的所有屬性。那裏,番石榴庫可以在下面的常規方式使用:

Function<Groupable, Grouping> groupFunction = new Function<Groupable, Grouping>(){ 

    @Override 
    public Grouping apply(Groupable groupable) { 

     return groupable.getGrouping(); 
    } 

}; 

ImmutableListMultimap<Grouping, Groupable> groupings = Multimaps.index(lsGroupable, groupFunction); 

groupings給我我需要什麼。 lsGroupable是一個Groupable對象的列表。

相關問題