我目前有一个这样的多层结构数据:
行业类具有一个私有字段
Set<Company>
,可以为null。公司类具有一个私有字段
Set<Division>
,可以为null。Division类具有一个私有字段
Set<Group>
,可以为null。组类具有一个私有字段
groupName
,该字段可以为null,并且可以使用getter(getGroupName()
)检索。
我正在尝试将Industry的一个实例一直向下传输到Group层,并将所有groupName串联到一个字符串中,并且在两者之间使用“ /”。
如果此Industry实例不包含任何groupName,则返回字符串“ null”。
基于对Java 8的有限了解,我正在考虑这样编写代码:
industry.stream()
.flatmap(industry -> industry.getCompanies().stream())
.filter(Objects::nonNull)
.flatmap(company -> company.getDivisions().stream())
.filter(Objects::nonNull)
.flatmap(division -> division.getGroups().stream())
.map(group -> group.getGroupName)
.collect(Collectors.joining("/")));
该代码似乎在某种程度上存在缺陷。另外,我不确定在哪里添加以下语句:如果Industry无法检索任何groupName,而不是将所有groupName连接到一个字符串中,则仅返回字符串“
null”。
在我的情况下,使用Java 8流的正确方法是什么?
谢谢。
Collectors.joining(…)
基于类StringJoiner
。它提供了定界符,前缀和后缀功能,但不幸的是没有提供空值的功能。
要添加该功能,我们将不得不重新实现Collectors.joining
,幸运的是,使用时,它并不难StringJoiner
。
更改流操作的最后一行
.collect(Collectors.joining("/"));
至
.filter(Objects::nonNull) // elide all null elements
.collect(()->new StringJoiner("/", "", "").setEmptyValue("null"), // use "null" when empty
StringJoiner::add, StringJoiner::merge).toString();
我目前有一个多层结构数据,如下所示: 行业类有一个私有字段
比如有对象 我只能按照顺序拿到数组['a', 'b', 'c', 'd', 'f'] 如果想给f赋值, 只能 如果想要写上面这个表达式的通用函数,要怎么写。
LocallyConnected1D层 LocallyConnected2D层
段合并的底层控制 读者应该已经了解每个ElasticSearch索引都由一个或多个分片加上零个或者多个分片副本组成(已经在第一章 介绍ElasticSearch论述过)。而且每个分片和分片副本实际上是Apache Lucene的索引,由多个段(至少一个段)组成。读者应该还记得,段数据都是一次写入,多次读取,当然保存删除文档的文件除外,该文件可以随机改变。经过一段时间,当条件满足时,多个小的段中的内
在本书中我们也遇到了不少底层的命令。 我们遇到的第一个底层命令是在 合并请求引用 中的 ls-remote 命令。我们用它来查看服务端的原始引用。 我们在 手动文件再合并、 Rerere 及 索引 章节中使用 ls-files 来查看暂存区的更原始的样子。 我们同样在 分支引用 一节中提到了 rev-parse 命令,它可以接受任意字符串,并将其转成一个对象的 SHA-1 值。 我们在 Git 内
Docker 底层的核心技术包括 Linux 上的命名空间(Namespaces)、控制组(Control groups)、Union 文件系统(Union file systems)和容器格式(Container format)。 我们知道,传统的虚拟机通过在宿主主机中运行 hypervisor 来模拟一整套完整的硬件环境提供给虚拟机的操作系统。虚拟机系统看到的环境是可限制的,也是彼此隔离的。这