算法Java中按多个属性对对象进行分组的一般方法
我有一系列物品:
class Item {
String type;
boolean flag;
int size;
...
}
有几种可能的类型(例如“a”、“b”和“c”),因此有几种可能的类型标志值组合(["a" ; false], ["a" ; true"], ["b" ; false]
,…)。我需要折叠具有相同值组合的项,所以我有collapse
方法和这个签名
Item collapse(Collection<Item> items)
我需要的是将输入项列表分成具有相同type
和flag
值的组
List<Collection<Item>> getGroups(Collection<Item> items) // method I need
这样我就可以把每个小组都搞垮
List<Item> r = getGroups(items).stream().map(Item::collapse).collect(toList());
所以我可以创建一个地图地图或制作一些复合键,但它需要一些样板代码,我希望避免使用这些代码。将来我可以有更多用于分组的属性,所以解决方案不应该硬编码在这两个属性上,而是可以轻松地扩展到新属性
如何才能很好地做到这一点?这个问题有一个众所周知的解决方案吗
共 (0) 个答案