按类别将一个 Set 拆分为多个 Set
如果这个问题已在其他地方得到解答,我深表歉意,但我还没有找到好的答案!
我有一个 Set
对象,需要按其底层 类进行拆分
类型,将每个对象放入一个 Set
中(显然这意味着初始集合中的每个对象只会出现在新 Set 的一个中代码>对象)。
我当前的方法如下:
public static Map<Class,Set<Foo>> splitByClass(Set<Foo> foos) {
// Create a map for the result
Map<Class,Set<Foo>> FooMap = new HashMap<Class,Set<Foo>>();
for (Foo foo: foos) {
Class type = foo.getClass();
// If a set for this key exists, add the item to that.
if (FooMap.containsKey(type)) {
FooMap.get(type).add(foo);
} else {
// Otherwise make a new set, add the item and the set to the map.
Set<Foo> set = new HashSet<Foo>();
set.add(foo);
FooMap.put(type, set);
}
}
return FooMap;
}
我的问题:是否有一种更通用的方法可以根据某些评估方法(例如检查类类型)将Set
拆分为子集?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以使用 Guava
Multimap
,它会让生活变得更加简单:此代码与上面的代码几乎相同,只是您必须将返回类型更改为
Multimap, Foo>
。这是一个适用于任何提供的接口类型的通用版本:
You can use a Guava
Multimap
, it will make life a lot simpler:This code is pretty much equivalent to your above code, except that you must change the return type to
Multimap<Class<? extends Foo>, Foo>
.And here's a generic version that works with any supplied interface type: