我知道Java containsAll方法,但是这种方法对我的需求并不起作用。假设我有列表的有趣的Java列表包含查询
[7 1 0 4 5]
和另一名单B
[1 1]
当我使用A.containsAll(B)我得到真正的,但我希望它是假的,因为2个项目不在列表A.
有没有办法做到这一点?
我知道Java containsAll方法,但是这种方法对我的需求并不起作用。假设我有列表的有趣的Java列表包含查询
[7 1 0 4 5]
和另一名单B
[1 1]
当我使用A.containsAll(B)我得到真正的,但我希望它是假的,因为2个项目不在列表A.
有没有办法做到这一点?
来自apache框架的CollectionUtils非常方便。 isSubCollection方法在这里做的伎俩,并解决您的目的。
public static boolean isSubCollection(Collection<?> a,
Collection<?> b)
下方所见的说明中载录如下─
返回true当且仅当A是B的子集,也就是,当且仅当 基数电子商务在小于或等于e的基数为 b,对于a中的每个元素e。参数:a - 第一(子?) 收集,不能为null b - 第二个(超?)收集,必须 不能为null返回:当且仅当A是B的子集
我不知道有一个“直接”的方法来做到这一点(只调用一个“检查”方法,如)。
正如其他答案指出的那样;可能有第三方库方法允许进行这种检查。
如果这不是一个选项,你可以通过多种方式自己实现这种检查。例如:
ListItem<T>
的类。这个类基本上包含从任意类型的列表一个元素(在你的榜样将是ListItem<Integer>
- 和该项目的出现的特定列表中的数在您的例子:
A: [7 1 0 4 5] gives ListItems (0, 1) (1, 1), (4, 1), (5, 1), (7,1)
和
B: [ 1 1 ] gives ListItem (1, 2)
而且很明显的列表项(1,2)为B不是显示listItems中的名单A
列表了你不一定创建一个特定的类,一个简单的HashMap<T, Integer>
会做,但有一个独特的类将允许很好的辅助方法,如隐式增加计数器值。
另一种需要不同性质开销的替代方法是:首先对两个列表进行排序,然后迭代第一个列表并检查第二个列表中的每个条目是否显示出来。
'Java!== JavaScript' –