我有一个从数据库收到的DTO列表,并且它们有一个ID。我想确保我的列表包含具有指定ID的对象。在这种情况下,显然创建具有预期字段的对象将无济于事,因为contains()会调用Object.equals(),而且它们将不相等。
我想到了这样的解决方案:创建一个接口HasId
,在我所有的DTO中实现它,并使用具有contains(Long id)
方法的新类继承ArrayList 。
public interface HasId {
void setId(Long id);
Long getId();
}
public class SearchableList<T extends HasId> extends ArrayList<T> {
public boolean contains(Long id) {
for (T o : this) {
if (o.getId() == id)
return true;
}
return false;
}
}
但是在这种情况下,我无法将List和ArrayList转换为SearchableList …我可以忍受,但是想确保我没有发明自行车。
编辑(16年10月):
当然,随着Java 8中lambda的引入,做到这一点的方法很简单:
list.stream().anyMatch(dto -> dto.getId() == id);
我建议像您编写的那样创建简单的静态方法,而无需任何其他接口:
public static boolean containsId(List<DTO> list, long id) {
for (DTO object : list) {
if (object.getId() == id) {
return true;
}
}
return false;
}
想知道什么在什么不在吗?Puppet 的 in 可以帮你, 如下面的表达式: if "foo" in $bar 如果 foo 是 $bar 的子串,表达式的值为 true。 如果 $bar 是个数组,并且 foo 是这个数组中的一个元素,表达式的值为 true。 如果 $bar 是一个哈希,foo 是 $bar 的一个键值,表达式的值为 true。 操作步骤 在你的配置清单中添加如下代码: if
请看do while循环,我认为注释是不言自明的。我想检查该集合是否设置了所有具有符号a、b、c、d的卡片(借助数组或其他任何东西实现它)。
假设有一个类: ...您有一个实例列表,即
我试着看看是否可以使用$elemmatch运算符,但它是面向子文档数组的。我知道我可以使用聚合框架,但在这种情况下,它似乎有些过头了。聚合框架可能不如单个查找查询快。是否有一种方法可以查询课程集合,以便返回的文档可以以类似于此的形式?
问题内容: 我有一组对象。每个对象都有字符串值。 我需要选择所有值等于“方向”的对象。 是否可以在不迭代集合的情况下进行? 谢谢。 问题答案: 一般来说,没有。您需要遍历该集合并检查每个对象,以查看该属性是否等于要搜索的值。这是一项操作。 在一种情况下,您可以不重复进行操作。如果对象的方法是根据该属性的相等性定义的,并且该方法也已正确实现,则可以使用来及时找到具有正确值的对象,而无需遍历集合。 正
问题内容: 假设有一个Obj类 并且您有一个实例列表,即。 现在,如何在Java8中使用过滤条件从流中找到列表中的对象的int字段值的总和(例如,对于object ,条件为)? 问题答案: 你可以做 或(使用方法参考)