按多个属性对对象列表进行分组
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
给了我我需要的东西。 lsGroupable
是 Groupable
个对象的列表。
我正在寻找一种通过多个 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
给了我我需要的东西。 lsGroupable
是 Groupable
个对象的列表。