java - 如何在 java 流中仅查找和匹配一个元素列表?
问题描述
我有一个包含一些家庭号码的列表,它们具有“isPrimary”和“number”属性。
"homeNumbers": [
{
"isPrimary": true,
"number": "9999999999"
},
{
"isPrimary": false,
"number": "9999999323"
}
]
现在,我想在列表上写两个条件来匹配其中一个,我的意思是这个列表必须有一个主号码,并且它的号码不能为空。
我写了下面的代码,但它只是检查是否有任何主号码,现在,我想知道如何扩展它以检查其中一个是主号码。
private boolean isSetPrimaryHomeNumber(UpdateWorkerDto updateWorkerDto) {
return updateWorkerDto.getPhoneNumbers().getHomeNumbers().stream().anyMatch(
number -> Objects.requireNonNullElse(number.getIsPrimary(), false) && !number.getNumber().isEmpty());
}
解决方案
您可以先按主要数字过滤,然后再次过滤非空数字,然后计数并与 1 进行比较,如下所示:
boolean isValid(List<HomeNumber> numbers) {
return numbers.stream()
.filter(HomeNumber::isPrimary)
.filter(n -> Objects.notNull(n.getNumber()))
.count() == 1;
}
推荐阅读
- html - 上传文件后如何做某事或调用后端
- python - 步骤的附件存储在 VSTS REST API 的什么位置?
- git - 您如何将已提交的更改从分支移动到主分支作为待处理的更改?
- typescript - 扩展类型以支持嵌套模块
- javascript - 使用自定义语言在 HTML 中单击
- snort - Snort 规则 - HTTP 正文内容
- javascript - 如何使用密钥向服务器发出对象
- visual-studio - 如何让 Visual Studio 在构建时转换特定的 T4 模板?
- android-studio - 模拟器未在 Hyper-V VM 中启动
- javascript - reactJs中如何检测包含特定类的子节点?