小编seb*_*kur的帖子

如何创建一个空的Guava ImmutableList?

我可以使用该方法创建一个GuavaImmutableListof,并根据传递的对象获取正确的泛型类型:

Foo foo = new Foo();
ImmutableList.of(foo);
Run Code Online (Sandbox Code Playgroud)

但是,没有参数of方法无法推断泛型类型并创建ImmutableList<Object>.

如何创建一个ImmutableList满足的空List<Foo>

java generics guava immutablelist

23
推荐指数
2
解决办法
1万
查看次数

Apache的StringUtils.isBlank(str)与Guava的Strings.isNullOrEmpty(str):你应该经常检查空格吗?

使用是否有任何优势

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更简单的检查相比是一个好主意?

java string apache-commons guava

21
推荐指数
2
解决办法
2万
查看次数

在Google Guava(Java)中,为什么Iterables.getFirst()和getLast()不一致?

来自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)

- >返回的最后一个元素iterabledefaultValue如果可迭代为空.

缺少一种静态方法(对我而言):

static <T> T getFirst(Iterable<T> iterable)
Run Code Online (Sandbox Code Playgroud)

- >返回第一个元素iterable.

你知道这种不一致的原因吗?

java guava

21
推荐指数
1
解决办法
1万
查看次数

用于Guava不可变集合的Java 8收集器?

我非常喜欢Java 8流和Guava的不可变集合,但我无法弄清楚如何将两者结合使用.

例如,如何实现将流结果收集到ImmutableMultimap中的Java 8 Collector

加分点:我希望能够提供键/值映射器,类似于Collectors.toMap()的工作方式.

java guava java-stream

21
推荐指数
3
解决办法
5591
查看次数

为什么番石榴没有后置条件?我可以用什么呢?

因此,Guava具有简单但有用的前置条件来检查方法参数.但我想有一个"后置条件"类也是合理的.或者只是因为java提供断言?

由于这样的类不存在,在mathod返回之前检查postonditions的"最佳"(练习)替代方法是什么?

java guava assertion

20
推荐指数
3
解决办法
2440
查看次数

用番石榴缓存

什么Guava类适合线程安全的缓存?我使用了一个组合键,它是动态构建的,所以softKeys()毫无意义,对吧?我在ConcurentLinkedHashMap的某个地方看到了,是不是要走了?它已经在最近发布了吗?对不起请问混乱的方式......

更新

这个问题很老了,通过他的回答可能是浪费时间.很长一段时间,CacheBuilder这是一条路.

java caching guava

18
推荐指数
2
解决办法
9601
查看次数

18
推荐指数
2
解决办法
617
查看次数

Guava:Iterables.filter VS Collections2.filter,有什么大不同?

我想在番石榴中知道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

java java-ee guava

17
推荐指数
1
解决办法
7388
查看次数

Scala范围/区间映射结构

我有几乎相同的数据结构中提到的问题,可以将一系列键映射到值,但对于Scala.

也就是说,我希望有一个非重叠的1D范围[a [i],b [i])的可变系统,它将映射到某种值v [i].执行此类工作的标准基础数据结构是红黑树.

我希望它拥有的操作,最好是所有操作都应该具有O(log n)的复杂度:

  • 通过指定其中的任何点来查询并获取给定范围(开始,结束,存储值)或缺少它
  • 在此结构中插入新范围
  • 从结构中删除范围

所以,我想到目前为止,我看到以下变种,所有这些都有其缺点:

  • Java的TreeMap上滚动自己的容器- 快速而肮脏,但由于缺乏适当的维护而长期可能不好
  • 使用Guava的RangeMap - 可能,但在Scala集合世界中会非常尴尬
  • 尝试使用Scala的红黑树实现并尝试自己滚动,但是,我想这很难,因为Scala的TreeMap只是不可变的,并且错过了直接的查找方法,例如Java的TreeMapfloorEntry

我在这里错过了什么吗?是否存在使用Scala中心API扩展基本Scala集合的类似Guava的维护良好的集合扩展库?

强烈相关的问题:

scala range red-black-tree guava range-map

17
推荐指数
1
解决办法
2154
查看次数

迭代Guava LoadingCache的map-view条目集会重置用于到期的访问时间吗?

我有一个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(),并且:

在前一种情况下:

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.

显然,我提到的第二种迭代方式确实会重置访问时间,但我想知道第一种方式是什么行为.

java guava

16
推荐指数
1
解决办法
4690
查看次数