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

Java 8流经多层,并在最底层连接所有项目

韦高格
2023-03-14
问题内容

我目前有一个这样的多层结构数据:

行业类具有一个私有字段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 来模拟一整套完整的硬件环境提供给虚拟机的操作系统。虚拟机系统看到的环境是可限制的,也是彼此隔离的。这