- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我一直在使用 Guava 的 ImmutableMap
用Builder
有一段时间没有考虑它是如何/为什么工作的。我一直按照 Javadoc 描述的方式使用生成器:
ImmutableMap<String, Integer> WORD_TO_INT =
new ImmutableMap.Builder<String, Integer>()
.put("one", 1)
.put("two", 2)
.put("three", 3)
.build();
我也看过例子 elsewhere关于此语法的 SO:
ImmutableMap<String,Integer> myMap = ImmutableMap.<String, Integer>builder()
.put("one", 1)
.put("two", 2)
.put("three", 3)
.build();
两者似乎产生完全相同的结果。
快速浏览 ImmutableMap
source显示静态 builder()
在第二个示例中调用返回:new Builder<K, V>()
这两种方法之间似乎没有任何功能差异。
引擎盖下有什么区别吗?有什么理由偏爱其中之一吗?
编辑:添加字节码差异。
除了一行之外,生成的字节码几乎完全相同:
方法一(Builder<K,V>
):
static {};
0 new com.google.common.collect.ImmutableMap$Builder [12]
3 dup
4 invokespecial com.google.common.collect.ImmutableMap$Builder() [14]
7 ldc <String "key1"> [17]
........
方法二:( <K,V>builder()
)
static {};
0 invokestatic com.google.common.collect.ImmutableMap.builder() : com.google.common.collect.ImmutableMap$Builder [12]
3 ldc <String "key1"> [18]
........
在那之后它们几乎相同,考虑到来源不同,第一行不同是有道理的,但我不确定为什么第一行调用 dup
而第二个则没有。
最佳答案
不,它们是相同的。第一种语法的原因是它是一个很好的单行代码。
第二种语法的原因是您可能有循环或其他流程控制,您可能需要传递 Builder
。
例如:
public static void main(final String[] args) throws Exception {
final ImmutableList.Builder<Integer> lb = ImmutableList.builder();
for (final String arg : args) {
lb.add(Integer.parseInt(arg));
}
}
在你说之前,是的,FluentIterable
在这种情况下可能会更好 - 但这只是一个例子。
关于java - Guava ImmutableMap Builder 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21921507/
这个问题已经有答案了: Java-syntax for explicitly specifying generic arguments in method calls (3 个回答) 已关闭 1 年前
我正在学习使用 Guava 库并引用this我看到使用构建器来构造不可变映射的实例。构建器构造函数如何创建抽象类实例? static final ImmutableMap WORD_TO_INT
很像 ImmutableList 可以这样扩展: ImmutableList originalList = ImmutableList.of(1, 2, 3); ImmutableList exten
我有ImmutableMap和List定义顺序。我想要ImmutableList与该命令。例如: map (, , ) list ["kk", "m", "a"] 因此,我想要给定列表中具有定义顺序的
在 Guava 的 ImmutableMap 的 javadocs 中说: Performance notes: unlike HashMap, ImmutableMap is not optimiz
如何处理字符串列表并将其收集到 Map 或 Immutable map 中,只为那些存在值的字符串 String anotherParam = "xyz"; Map.Builder resultMap
在下面非常简单的代码中: public static void test(Map t){ for(Map.Entry e : t.entrySet()){ //The next l
我正在关注this tutorial为了尝试向我的基于 dropwizard 的 API 添加身份验证。 我遇到一个问题,因为本教程需要编写一个 validator 类,并使用以下代码: privat
我在支付网关公司工作,在分析我遇到的代码时ImmuatbleMap 对象。我想知道有关的所有细节。它是什么?它比 map 有什么优势?核心 java 是否支持 ImmuatbleMap? 最佳答案 I
我在 IntelliJ 中有一个包含 pom.xml 的 java 项目,它使用集合 4.0.0 test test 1.0-SNAPSHOT
我想使用 GSON 来反序列化: "starterItems": { "Appeltaart": 3, "Soap_50": 3 } ...进入 Guava ImmutableMap:
比如说,我有一个名为 DomainObject 的类, class DomainObject { private Long id; private String domainParam; }
我和一位同事一起做了一些测试,我们从数据库中提取数据(大约 350,000 条记录),将每条记录转换为一个对象和一个关键对象,然后将它们填充到一个 ImmutableMap.Builder 中。 当我
我们目前正在将 Guava 用于其不可变集合,但我惊讶地发现他们的 map 没有方法可以轻松创建只需稍作修改的新 map 。最重要的是,他们的构建器不允许为键分配新值或删除键。 因此,如果我只想修改一
我一直在使用 Guava 的 ImmutableMap用Builder有一段时间没有考虑它是如何/为什么工作的。我一直按照 Javadoc 描述的方式使用生成器: ImmutableMap WORD_
我有一个返回 map 的方法。我最初会返回方法生成的 HashMap,但认为返回 ImmutableMap 会更好。不幸的是,以下语句拒绝在 eclipse 中工作: HashMap map = ne
我需要 Google Collection ImmutableMap 和 LinkedHashMap 的组合——具有定义迭代顺序的不可变映射。看来 ImmutableMap 本身其实已经定义了迭代顺序
当我序列化 HashMap 时,我可以保留类型信息,以便我可以将它反序列化为相应的类型,但这在序列化 com.google.common.collect 时不起作用.ImmutableMap。如何保留
这个问题在这里已经有了答案: Java 8 collector for Guava immutable collections? (5 个回答) 6年前关闭。 我发现自己想要 Collectors.t
我在 Android 项目中使用 Guava 集合。刚刚注意到以下行为: 在 Activity1 中: Intent i = new Intent(this, Activity2.class); i.
我是一名优秀的程序员,十分优秀!