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

Group a list of objects by multiple attributes

我正在寻找一种通过多个 class 属性对对象列表进行分组的好方法。 Google guava library 提供了按单个属性分组的功能。我还没有找到一个实用程序可以提供我正在寻找的东西。

见下文。我已经将分组属性封装到了它自己的classGrouping中。但是,如果存在更好的解决方案,则不必这样做。

包含分组属性的 class。

Class Grouping{

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

 //getters, setters

}

Class 表示需要分组的类型。

Class Groupable{

 private Grouping grouping;

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

 // getters, setters

}

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

Map<Grouping, List<Groupable>> groupings;

欢迎提出任何建议!

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

我使用 Eclipse IDE,所以我需要做的就是转到 Source -> 'Generate hashCode() and equals()..' 并在我的 Grouping class 上调用相同的内容以包含覆盖实现中的所有属性。在那里,番石榴库可以按以下常规方式使用:

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 个对象的列表。