标签: guava

Guava Joiner 对 null 元素抛出 NPE

Joiner这里初始化不正确吗?我有以下课程,当我尝试使用 加入示例paths数组时joiner,我得到了一个NullPointerException.

public class CPath {
  private static final Joiner joiner = Joiner.on("/");

  private String[] elements;

  @Override
  public String toString() {
    return joiner.join(elements);
  }
}

// main method
final String[] paths = {"a/b/c", "d", "", null, "e/f/g", "h/i", null, ""};
final CPath c3 = new CPath(paths);
c3.toString(); //<<<< NPE
Run Code Online (Sandbox Code Playgroud)

java guava

0
推荐指数
1
解决办法
1565
查看次数

使用 Guava Joiner 连接数组并包装每个元素

例如,我有字符串数组:

String[] arr = {"one", "two", "three"};
Run Code Online (Sandbox Code Playgroud)

使用 Guava Joiner 可以得到这样的字符串:

"<one>, <two>, <three>"
Run Code Online (Sandbox Code Playgroud)

其中, 是分隔符,< >是每个元素的前缀和后缀。谢谢。

java guava

0
推荐指数
1
解决办法
1017
查看次数

Guava 的 EvictingQueue 的替代品,用 @Beta 注释

在我的项目的一个关键部分中,它基本上允许控制器异步接收对象,放入 a 中,Queue由线程一次从队列中顺序处理一个,然后服务响应,较旧的处理过的对象保留在队列中,直到更新的对象项目插入。

回到过去(几个月前),我Queue解决这个特定业务特定问题的实现是使用 Guava 的EvictingQueue,它现在标记为@Beta,因此应用程序的这一部分可能会在未来的 Guava 版本中中断。

private final Queue<SomeRandomBusinessObject> items = Queues.synchronizedQueue(EvictingQueue.create(queueSize));
Run Code Online (Sandbox Code Playgroud)

是否有任何线程安全和固定大小的替代方案来EvictingQueue实现这一目标?

java queue guava spring-boot

0
推荐指数
1
解决办法
1057
查看次数

如果底层对象为空,则返回可选的内置方法

我遇到一个特定的用例,如果对象为空,我经常需要将它们包装起来Optional。看一下这段代码:

List<AbstractCorporateAction> cas = stream.toList();
if (cas.isEmpty()) return Optional.empty();
else return Optional.of(cas);
Run Code Online (Sandbox Code Playgroud)

我检查列表是否为空,如果确实为空,则返回一个空可选,如果不是,则将其包装。原因是有时我得到列表本身的空值,有时我得到一个实际的列表,但它是空的。

通过这种方法,当返回的可选本身为空时,我不需要仔细检查底层列表。

但对于不同的数据结构,实现方式有所不同。是否有第三方库的内置方法可以实现此目的?我得到的最接近的是 fromGuava.MoreObjects#isEmpty但它只检查对象是否为空,并且在它为空的情况下不返回可选值。

我可以为此编写自己的封面,但我正在寻找一种专业、可靠的方法来实现所需的功能。

java guava java-stream option-type java-17

0
推荐指数
1
解决办法
948
查看次数

番石榴入门

如何将Guava用于我的Web应用程序?我想用它来代替JUnit进行测试.那可能吗?如果我使用JSP和servlet构建webapps,我可以从Guava中获得什么其他用途?

java guava

-1
推荐指数
1
解决办法
1234
查看次数

函数式递归与番石榴?

我有一个基本实现的MyService接口MyServiceImpl.我将其包装MyServiceImpl成一系列MyService装饰器.

为此,我创建了MyServiceDelegate一个抽象类,它接受一个MyService实例并将所有服务调用委托给提供的MyService实例.

但是在我的单元测试中,对于特定需求,我需要找回第一个真正的实现MyService,即MyServiceImpl,我只有一个MyService引用装饰器.

我只是想知道是否可以使用Guava,以功能性的方式进行递归,这将返回我已经装饰了很多层并且不是委托服务的"原始服务".我想使用像Function这样的函数来返回委托服务,如果是原始服务,则使用null,但不知道是否使用它.

我知道我可以通过while循环轻松完成,而且我不是在寻找替代解决方案.只想知道番石榴是否可以解决这些问题.

java recursion functional-programming guava

-1
推荐指数
1
解决办法
452
查看次数

如何在没有迭代器的情况下迭代时从集合中删除元素

假设我有一个字符串列表(简化)

fullList = {a,b,c,d,a,d,c,b}

而且我想找到喜欢的情侣

couplesList = {{a,a},{b,b}, ...}

我此刻接近这个问题的方式是

  1. 获得第一个元素
  2. 使用guava谓词来查找正确的对象
  3. 现在怎么办?

我最终得到了两个对象{a,a},但是我无法将它们从中删除,fullList因为我没有使用迭代的"迭代器"样式(因为我使用的是番石榴谓词它无论如何都不会起作用 - 因为我没有迭代器指向由Itarables.find(...)函数找到的元素).

我想以"高效"的方式做到这一点,所以我想避免多个嵌套循环等.

任何想法如何更正确/有效地处理这个问题?我有点卡住了.

java collections guava

-1
推荐指数
1
解决办法
285
查看次数

对于Google Guava,ImmutableLists正在创建一个与ImmutableList.of()等效的Collections.EMPTY_LIST副本?

其中哪一个更受欢迎?

private static ImmutableList<Airline> sAirlines = 
                          ImmutableList.copyOf(Collections.EMPTY_LIST);

private static ImmutableList<Airline> sAirlines = ImmutableList.of();
Run Code Online (Sandbox Code Playgroud)

java collections guava

-1
推荐指数
1
解决办法
276
查看次数

将字符串解析为布尔值,默认值为 true

我有一个字符串,我想将其解析为布尔值。如果它不包含truefalse字符串,它应该返回默认值(true在我的例子中)。

"true" -> true
"false" -> false
"something" -> true
Run Code Online (Sandbox Code Playgroud)

我正在寻找 Java 方法或一些 util(Apache Commons 或 Guava)。


我无法使用Java方法Boolean.parseBoolean,因为它没有带默认值的参数(默认值始终是false):

System.out.println(Boolean.parseBoolean("true")); // true
System.out.println(Boolean.parseBoolean("false")); // false
System.out.println(Boolean.parseBoolean("something")); // false instead of true
Run Code Online (Sandbox Code Playgroud)

与 Apache Commons 相同BooleanUtils.toBoolean

System.out.println(BooleanUtils.toBoolean("true")); // true
System.out.println(BooleanUtils.toBoolean("false")); // false
System.out.println(BooleanUtils.toBoolean("something")); // false instead of true
Run Code Online (Sandbox Code Playgroud)

我可以写我自己的方法:

private static Boolean toBoolean(String value, boolean defaultValue) {
    return Optional.ofNullable(BooleanUtils.toBooleanObject(value))
            .orElse(defaultValue);
}
Run Code Online (Sandbox Code Playgroud)

并使用它:

System.out.println(toBoolean("true", true)); // true
System.out.println(toBoolean("false", true)); // false …
Run Code Online (Sandbox Code Playgroud)

java apache-commons guava

-1
推荐指数
1
解决办法
2453
查看次数

谷歌番石榴图书馆

这个问题与之前提出的问题有关.据我所知,我正在尝试使用Google Guava库来查找集合交集.

HashMap m1 = new HashMap();
m1.put(1, new Integer[]{1,2,3,4});
m1.put(2, new Integer[]{1,4,5,6});

HashMap m2 = new HashMap();
m2.put(1, new Integer[]{1,5,null,null});
m2.put(2, new Integer[]{1,4,null,null});
Run Code Online (Sandbox Code Playgroud)

现在,据我所知,我应该应用Guava函数entriesInCommon()来查找两个映射中出现的条目.但我不明白我该怎么做.有任何想法吗?谢谢.

更新:地图中的键

java guava

-2
推荐指数
1
解决办法
458
查看次数