我一直在寻找Java中的双向映射实现,并偶然发现了这两个库:
两者都是免费的,具有我正在寻找的双向地图实现(Apache中的BidiMap,Google中的BiMap),几乎相同的大小(Apache 493 kB,Google 499 kB)[编辑:不再是真的!]并且似乎在各方面都和我很相似.
我应该选择哪一个,为什么?是否有其他等效替代方案(必须是免费的并至少具有双向映射)?我正在使用最新的Java SE,所以不需要人为地限制Java 5或类似的东西.
我有过的快速扫描番石榴API,它提供了新的集合类型(Multimap以及BiMap例如出现有用),我想包括在项目(S)我工作的图书馆.
然而,如果它们没有什么好处并且学习这些功能浪费了宝贵的时间,我也不愿意将这些图书馆包括在内.
您是否已将Guava库包含在项目中并且以任何意外方式证明它有用吗?你将来会一直使用它吗?它的主要优点/节省时间是什么?它隐藏的功能是什么?
Guava为初始化地图提供了一个很好的快捷方式.但是,当我的地图初始化为九个条目时,我得到以下编译器错误(Eclipse Indigo).
of(K, V, K, V, K, V, K, V, K, V)类型中的方法ImmutableMap不适用于参数
(String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String)
ImmutableMap<String,String> myMap = ImmutableMap.of(
"key1", "value1",
"key2", "value2",
"key3", "value3",
"key4", "value4",
"key5", "value5",
"key6", "value6",
"key7", "value7",
"key8", "value8",
"key9", "value9"
);
Run Code Online (Sandbox Code Playgroud)
该消息似乎表明了这一点
ImmutableMap的最大大小为四对键值.
显然,情况并非如此,但我无法弄清楚如何增加初始化程序的大小.
有人能告诉我缺少什么吗?
我们目前使用apache集合,字符串utils等.我需要决定是否应该从apache基础实现切换.
重要的标准是开发人员易于使用.性能/内存使用对我们来说还不是一个重要的问题.发展速度是此时的关键标准.
我很欣赏有关番石榴开发人员的生活变得如此轻松的观点.
我参与了Android应用程序的开发,这是一个相当"厚"的Web服务移动客户端.它与服务器进行了大量的通信,但也有很多内部逻辑.所以,我决定使用Google Guava库的一些功能来简化开发过程.以下是我非常感兴趣的功能列表:不可变集合,基本工具,集合扩展,函数编程糖和习语(common.collect和common.base),原语实用程序(common.primitives),散列实用程序(common.hash),并发工具(期货和AsyncFunction).我不想在Android中使用的东西:( common.cache见下面的问题),common.eventbus(我们有更好的Android专用库,比如Otto),common.io(我们现在可以使用okio for Android).
我读到使用Guava for Android可以显着减慢编译过程并降低整个运行时性能: Android上的Guava Cache性能不佳 (在这种情况下它是合理的,不需要使用Guava的Android缓存)和 添加Google Guava到Android项目 - 显着减慢了构建速度
那么,在Android项目中使用Guava库是否有效,或者这个库只用于服务器端开发,我应该使用标准解决方案?任何解释都将非常感激.
我正在查找标准库(如apache commons,jax,jboss,javax)中的接口或枚举列出所有标准mime类型(aka内容类型)的值.
这个接口不应该与其他类太深,以至于难以将整个串包含为gwt源代码.
例如
interface ContentType{
String JSON = "Application/JSON";
blah ... blah ...
}
Run Code Online (Sandbox Code Playgroud)
要么,
enum ContentType{
JSON("Application/JSON"),
blah ... blah ...
}
Run Code Online (Sandbox Code Playgroud) 假设,我有一个恒定数量的集合(例如3个ArrayLists)作为类的成员.现在,我想将所有元素公开给其他类,以便它们可以简单地遍历所有元素(理想情况下,只读).我正在使用guava集合,我想知道如何使用guava iterables/iterators来生成内部集合的逻辑视图,而无需制作临时副本.
我想要一张带有重复键的地图.
我知道有很多地图实现(Eclipse向我展示了大约50个),所以我敢打赌必须有一个允许这个.我知道编写自己的地图很容易做到这一点,但我宁愿使用一些现有的解决方案.
也许在commons-collections或google-collections中有什么东西?
Apache Commons IO有一个很好的方便方法IOUtils.toString()来读取InputStream一个String.
因为我试图从Apache Commons转移到Guava:在番石榴中是否有相同的东西?我查看了com.google.common.io包中的所有类,我找不到任何简单的东西.
编辑:我理解并欣赏charsets的问题.事实上,我知道所有的源都是ASCII(是的,ASCII,而不是ANSI等),所以在这种情况下,编码对我来说不是问题.
是否有一种简短而甜蜜的方式来生成一个List<Integer>或者一个 Integer[]或者int[]从某个start值到end值的连续值?
也就是说,短于,但相当于以下1:
void List<Integer> makeSequence(int begin, int end) {
List<Integer> ret = new ArrayList<>(end - begin + 1);
for (int i=begin; i<=end; i++) {
ret.add(i);
}
return ret;
}
Run Code Online (Sandbox Code Playgroud)
番石榴的使用很好.
更新:
由于这个问题已经收到了几个很好的答案,无论是使用本机Java 8还是第三方库,我都认为我会测试所有解决方案的性能.
第一个测试只是[1..10]使用以下方法测试创建10个元素的列表:
List<Integer>而是创造一个ContiguousSet<Integer>- 但由于它Iterable<Integer>按顺序实现,它主要用于我的目的.IntStream.rangeClosed()- 这是在Java 8中引入的.guava ×10
java ×10
collections ×3
android ×1
arrays ×1
content-type ×1
dictionary ×1
duplicates ×1
gwt ×1
inputstream ×1
io ×1
mime-types ×1
multimap ×1