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

干净的番石榴方法来处理可能为空的集合

邓越泽
2023-03-14
问题内容

我有一个带有参数的方法,该参数Collection<Foo> foos可以为NULL。我想将输入的本地副本作为结束ImmutableSet。现在,我的代码如下所示:

if (foos == null)
{
  this.foos = ImmutableSet.of();
}
else
{
  this.foos = ImmutableSet.copyOf(foos);
}

有没有更清洁的方法可以做到这一点?如果foos是一个简单的参数,我可以做类似的事情,Objects.firstNonNull(foos, Optional.of())但是我不确定是否有类似处理集合的事情。


问题答案:

我不明白为什么您不能使用Objects.firstNonNull

this.foos = ImmutableSet.copyOf(Objects.firstNonNull(foos, ImmutableSet.of()));

您可以使用静态导入保存某些类型的输入,如果您要这样做的话:

import static com.google.common.collect.ImmutableSet.copyOf;
import static com.google.common.collect.ImmutableSet.of;
// snip...
this.foos = copyOf(Objects.firstNonNull(foos, of()));


 类似资料:
  • 我甚至不确定这是否可能,但我正在执行一个集合操作,如或,我需要将其转换为以便洗牌列表并将其传递给接受而不是的其他方法。因此,我将结果转换为并且一切都很好。但是从探查器中,我看到操作在负载下花费了很长时间,这是因为Guava设置的方式。它不像普通java集那样是一个常量操作。 下面是代码示例 我正在尝试找到将番石榴转换为的最快方法。通过挖掘代码,这就是Guava Sets所做的工作https://g

  • 问题内容: 我有一个库,其中为我们的客户提供了两种方法,sync和async。他们可以调用他们认为适合其目的的任何方法。 executeSynchronous()-等待直到得到结果,然后返回结果。 executeAsynchronous()-立即返回一个Future,如果需要,可以在完成其他操作之后进行处理。 他们将传递其中包含用户ID的DataKey对象。然后,我们将根据用户ID确定要调用的计算

  • 我想为番石榴设个坑(http://pitest.org/)进行突变熟练度测试,但我在尝试运行时出现以下错误。这是我得到的错误: 基本上,要么PIT没有检测到测试,要么测试在PIT中运行不正常,所有测试都失败了。我读了这篇文章:JUnit测试通过,但PIT说套件不是绿色的,我认为“您的代码库是否包含可变静态状态?(例如在单例中)”是问题所在,但我不知道如何修复它。如果测试套件有一些隐藏的顺序依赖关系

  • 我非常喜欢Java8流和Guava的不可变集合,但我不知道如何将两者结合使用。 例如,如何实现将流结果收集到不可变多映射中的Java 8收集器? 奖励点:我希望能够提供键/值映射器,类似于Collectors.toMap()的工作方式。

  • 问题内容: 我已经使用番石榴已有一段时间了,并且对此感到非常信任,直到昨天我偶然发现了一个例子,这让我开始思考。长话短说,这里是: 运行此命令后,您可以看到 ImmutableList 内部的条目的值已更改。如果此处涉及两个线程,则一个线程可能碰巧看不到另一个线程的更新。 同样令我非常不耐烦的是,Effective Java中的Item15,第5点说: 在构造函数中制作防御程序副本 -看起来很合理

  • 问题内容: 在我的Java代码中,我通过以下方式使用Guava的Multimap(com.google.common.collect.Multimap): 此处,Multimap键是URL的一部分,而值是URL的另一部分(转换为整数)。现在,我分配了JVM 2560 Mb(2.5 GB)堆空间(通过使用Xmx和Xms)。但是,它只能存储900万个这样的(键,值)整数对(大约1000万个)。但是,理