按多个属性对对象列表进行分组

时间:2015-01-26 21:54:04

标签: java collections

我正在寻找一种通过多个类属性对对象列表进行分组的好方法。 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

}

我需要的是一个包含as键的Map,一个具有唯一键集的Groupable对象。以及可分组对象列表作为相应的分组项目。

Map<Grouping, List<Groupable>> groupings;

欢迎任何和所有建议!

1 个答案:

答案 0 :(得分:0)

根据@JBNizet和@ JohnBollinger的评论回答我自己的问题。

我使用Eclipse IDE,所以我需要做的就是去Source - &gt; '生成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给了我我需要的东西。 lsGroupableGroupable个对象的列表。