当前位置: 首页 > 面试题库 >

找出对象列表是否包含具有指定字段值的内容?

邹宣
2023-03-14
问题内容

我有一个从数据库收到的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 ,条件为)? 问题答案: 你可以做 或(使用方法参考)