java - 从可选列表中流式传输
问题描述
我在下面有一个简单的例子
static class Town {
School school;
}
static class School {
List<Subject> subjects;
}
static class Subject{
String name;
}
我想实现一个返回给定城镇主题名称的方法,城镇也可以为空
List<String> getSubjectNames(Town town) {
return Optional.ofNullable(town)
.map(town1 -> town1.school)
.map(school -> school.subjects.stream())
.flatMap(subjects -> )
...
}
您如何正确地将主题流转换为主题以进行地图操作。任何指针将不胜感激。
解决方案
不要使用 Optional 来检查 null。那不是它的用途。你所需要的(如果你真的想接受一个空城镇)是
List<String> getSubjectNames(Town town) {
if (town == null) {
return Collections.emptyList();
}
return town.getSchool()
.getSubjects()
.stream()
.map(Subject::getName)
.collect(Collectors.toList());
}
如果你真的有一个可选城镇,你基本上会做同样的事情:
return optionalTown.map(town ->
town.getSchool()
.getSubjects()
.stream()
.map(Subject::getName)
.collect(Collectors.toList())
).orElse(Collections.emptyList());
推荐阅读
- c# - EF Core 查询存储过程映射到类型
- ios - ios静态库运行脚本与xcode 10有什么变化吗?
- php - 使用 Angular js 自定义指令在单击按钮时加载不同的 html 视图
- shopify - Zipify 一键追加销售如何运作?什么是高级架构?
- sql-server - 无法通过 typeorm 登录 mssql
- ios - 我应该如何实现 point(inside:with:)?
- android - 白天模式状态栏/控件在重新创建后主题不一致的问题
- chart.js - Chart.js 和 dygraphs JavaScript 库在性能和寿命方面的差异
- node.js - NodeJS:Passport JWT(v4.0.0) 无法从 POSTMAN Rest Client 验证用户,始终返回 Unauthorized
- perl - check_megaraid_sas nagios 插件说明