我可以使用该方法创建一个GuavaImmutableListof,并根据传递的对象获取正确的泛型类型:
Foo foo = new Foo();
ImmutableList.of(foo);
Run Code Online (Sandbox Code Playgroud)
但是,没有参数的of方法无法推断泛型类型并创建ImmutableList<Object>.
如何创建一个ImmutableList满足的空List<Foo>?
使用是否有任何优势
StringUtils.isBlank(str)
Run Code Online (Sandbox Code Playgroud)
来自Apache commons-lang.
VS
Strings.isNullOrEmpty(String string)
Run Code Online (Sandbox Code Playgroud)
来自Google Guava?
我想在Java项目中使用后替换数百个它们:
if(str == null || str.isEmpty())
Run Code Online (Sandbox Code Playgroud)
Guava的isNullOrEmpty似乎是我项目中上述用法的直接替代品.
但是,基于我对SO问题的阅读,更多人似乎使用了Apache的isBlank方法.
唯一的区别似乎是除了检查字符串是空还是空之外StringUtils.isBlank(str) 还检查空格.
通常,检查字符串是否为空白或者在代码中产生的结果与Guava更简单的检查相比是一个好主意?
来自Google Guava JavaDocIterables:
static <T> T getFirst(Iterable<T> iterable, T defaultValue)
Run Code Online (Sandbox Code Playgroud)
- >返回第一个元素iterable或者defaultValue如果iterable为空.
static <T> T getLast(Iterable<T> iterable)
Run Code Online (Sandbox Code Playgroud)
- >返回的最后一个元素iterable.
static <T> T getLast(Iterable<T> iterable, T defaultValue)
Run Code Online (Sandbox Code Playgroud)
- >返回的最后一个元素iterable或defaultValue如果可迭代为空.
缺少一种静态方法(对我而言):
static <T> T getFirst(Iterable<T> iterable)
Run Code Online (Sandbox Code Playgroud)
- >返回第一个元素iterable.
你知道这种不一致的原因吗?
我非常喜欢Java 8流和Guava的不可变集合,但我无法弄清楚如何将两者结合使用.
例如,如何实现将流结果收集到ImmutableMultimap中的Java 8 Collector?
加分点:我希望能够提供键/值映射器,类似于Collectors.toMap()的工作方式.
因此,Guava具有简单但有用的前置条件来检查方法参数.但我想有一个"后置条件"类也是合理的.或者只是因为java提供断言?
由于这样的类不存在,在mathod返回之前检查postonditions的"最佳"(练习)替代方法是什么?
什么Guava类适合线程安全的缓存?我使用了一个组合键,它是动态构建的,所以softKeys()毫无意义,对吧?我在ConcurentLinkedHashMap的某个地方看到了,是不是要走了?它已经在最近发布了吗?对不起请问混乱的方式......
这个问题很老了,通过他的回答可能是浪费时间.很长一段时间,CacheBuilder这是一条路.
在某些情况下,我真的很喜欢使用Guava的Striped类.
C#中有等价物吗?
我想在番石榴中知道Iterables.filter(Iterable, Predicate)和Collections2.filter(Collection, Predicate)方法之间是否有任何区别?
它们似乎都维护迭代顺序,并提供实时视图.Javadoc说调用Collections2.filter().size()将迭代所有元素.
假设我有一个谓词来过滤项目列表,因此我想要在视图中留下的项目数量(或列表,无关紧要).我应该用什么?使用起来似乎更简单,Collections2.filter因为size()方法是由Collections 提供的.
但在后台,有没有区别:
ImmutableList.copyOf(
Iterables.filter(lead.getActions(), isRealActionDoneByUserPredicate)
).size();
Run Code Online (Sandbox Code Playgroud)
和:
Collections2.filter(lead.getActions(),isRealActionDoneByUserPredicate).size();
Run Code Online (Sandbox Code Playgroud)
顺便说一句,建设ImmutableList比建设正常更快ArrayList?
我有几乎相同的数据结构中提到的问题,可以将一系列键映射到值,但对于Scala.
也就是说,我希望有一个非重叠的1D范围[a [i],b [i])的可变系统,它将映射到某种值v [i].执行此类工作的标准基础数据结构是红黑树.
我希望它拥有的操作,最好是所有操作都应该具有O(log n)的复杂度:
所以,我想到目前为止,我看到以下变种,所有这些都有其缺点:
floorEntry我在这里错过了什么吗?是否存在使用Scala中心API扩展基本Scala集合的类似Guava的维护良好的集合扩展库?
强烈相关的问题:
我有一个LoadingCache<K,V>创建使用CacheBuilder:
LoadingCache<K,V> myCache = CacheBuilder.newBuilder()
.expireAfterAccess(1, TimeUnit.MINUTES)
.maximumSize(500)
.build(someCacheLoader);
Run Code Online (Sandbox Code Playgroud)
我需要定期迭代缓存中的所有条目(键和值).我知道我可以使用LoadingCache#asMap(),并且:
Map#entrySet(),或者Map#keySet(),明确Map#get(Object)的值.在前一种情况下:
for (Map.Entry<K, V> entry : myCache.asMap().entrySet()) {
K key = entry.getKey();
V value = entry.getValue();
doSomeWorkOn(key, value);
}
Run Code Online (Sandbox Code Playgroud)
这会更新缓存中每个条目的访问时间吗?我已经CacheBuilder#expireAfterAccess(long, TimeUnit)非常仔细地阅读了JavaDoc ,但在这种情况下发现它是模棱两可的/不清楚的:
指定在创建条目,最近替换其值或上次访问后经过固定持续时间后,应自动从缓存中删除每个条目.所有缓存读写操作(包括
Cache.asMap().get(Object)和Cache.asMap().put(K, V))都会重置访问时间,但不会通过集合视图上的操作重置访问时间Cache.asMap.
显然,我提到的第二种迭代方式确实会重置访问时间,但我想知道第一种方式是什么行为.