当前位置: 首页 > 知识库问答 >
问题:

流API allMatch()与多个空嵌套对象

澹台华采
2023-03-14

我正在处理一个请求验证功能,在那里我需要检查是否有某个字符串值存在于包含在对象中的属性中,该属性包含在地图条目的值中,该地图是对象的一部分,最后是我的请求正文包含一组这些对象。

为了让它更清晰,我将只使用重要的代码部分来重新创建我的情况。

假设我的ClassA在请求体中被接收,它具有以下属性:

@Nullable
Set<ClassB> mySet = null;

现在,我们有了ClassB,它有一个类型为ClassC的特定包装器对象:

@Nullable 
ClassC classC;

该包装类ClassC包含一个映射:

@Nullable
Map<String, ClassD> classDMap = new HashMap<>;

最后,ClassD包含需要检查的属性,如果它包含某个值:

@Nullable
String propertyForValidation;

当时我使用的代码如下所示:

public boolean isValid(ClassA body) {
  return body.getMySet().stream()
                        .allMatch(x -> x.getClassC().getClassDMap().values().stream()
                        .allMatch(y -> y.getPropertyForValidation.equals("someValue"));
}

我的代码当前的问题是,当我上面描述的一些对象为null时,它不能像预期的那样工作,因为我得到了大量的NullPointerExceptions。我想这可以通过大量的ifs和null检查来解决,但我想知道是否有一种更优雅的方法可以使用Stream API来实现?

非常感谢您的帮助,谢谢。

共有1个答案

伯博
2023-03-14

我会尝试使用Stream.filter()。类似于Stream.filter(x-

在你的情况下,恐怕在你的每一个对象或字段(可为空)获取器之前都有必要。但这是我最喜欢的流线型方式。

对于空映射的情况,还可以将其与isEmpty()方法结合使用。

另一种方法是在getter函数中添加if语句。这将允许您保留您已经编写的确切流。

 类似资料:
  • 问题内容: 使用mongoosejs填充和直接对象包含之间是否有性能差异(查询的处理时间)?什么时候应该使用? 猫鼬人口的例子: 猫鼬对象嵌套示例: 问题答案: 关于猫鼬种群的第一件事,是要了解它不是魔术,而只是一种方便的方法,它使您无需亲自完成所有操作即可检索相关信息。 该概念主要用于以下情况:您决定需要将数据放置在单独的集合中,而不是将数据嵌入其中,并且主要考虑因素通常应在文档大小上,或者在相

  • 我有一个观察者,一个观察者,一个观察者。。。 它基本上下降了4个级别。 目标有一个列表 Objective有一个 战略有一个列表 战术有一个列表 任务 显然,这看起来是设置树视图以显示此数据的完美方案。如何才能使结构中的任何更改也显示在树视图上? 我认为目标将是根节点。每当一个目标被添加到它的列表中时,我们可以监听它并提醒目标刚刚创建了一个目标。不过,我应该如何以及在哪里设置这个监听器?我是否提醒

  • 问题内容: 我在ElasticSearch中将以下文档编入索引 我想进行部分更新以清空嵌套属性,所以我应该这样做;因此,我尝试发送部分更新: 但是,此操作无济于事,文档保持不变。如何使用部分更新清空文档中的嵌套对象? 问题答案: 我建议像这样进行脚本更新,它将起作用:

  • 我正在使用空手道JavaAPI处理Json对象。我将创建以下json: 当我尝试,我得到以下错误: json路径语法经过交叉检查是正确的,我可能缺少的任何其他点? 编辑:我正在使用v1。空手道核心1.0

  • 问题内容: 我今天才刚开始编写Go(有0个经验),想知道Go是否支持任何形式的“构建所有源文件” 。 我的项目结构是 当我做 这失败了,这是正确的,因为所有源文件都在子包中。 是否有一个命令可以构建所有子包, 而无需显式列出每个 子包? 问题答案: 你以后到基本目录,使用注意,有3个阶段,因为它是一个省略号。这将递归地构建所有子目录。当然,您始终可以从任何地方进行操作而无需访问目录。 对于使用依赖