Tag: guava

readResolve无法正常工作? :出现了一个Guava的SerializedForm实例

在我们的一个数据结构的反序列化过程中(使用默认机制(没有自定义writeObject / readObject)),会出现一个ImmutableMap $ SerializedForm实例(来自google的Guava库)。 这样的实例不应该从guava的客户端看到,因为SerializedForm的实例被替换为readResolve(参见com.google.common.collect.Immutable类中的“writeReplace”)。 因此,反序列化失败,并显示以下消息: java.lang.ClassCastException: cannot assign instance of com.google.common.collect.ImmutableMap$SerializedForm to field .. of type java.util.Map in instance of com.blah.C 这是正确的,因为ImmutableMap $ SerializedForm不是java.util.Map的子类型,但它应该被替换。 出了什么问题? 我们在com.blah.C类中没有自定义的writeObject / readObject。 我们在父对象(包含com.blah.C)中有自定义序列化代码。 更新,这是堆栈跟踪的顶部: java.lang.ClassCastException: cannot assign instance of com.google.common.collect.ImmutableSet$SerializedForm to field com.blah.ast.Automaton.bodyNodes of type java.util.Set in instance of com.blah.ast.Automaton at java.io.ObjectStreamClass$FieldReflector.setObjFieldValues(ObjectStreamClass.java:2039) at java.io.ObjectStreamClass.setObjFieldValues(ObjectStreamClass.java:1212) at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1952) at […]

如果占用太多时间,如何取消AsyncRestTemplate HTTP请求?

从开始,我总是混淆如何处理InterruptedException以及如果他们花费太多时间如何正确取消http请求。 我有一个库,我已经为我们的客户提供了两种方法,sync和async。 他们可以调用他们认为适合他们目的的任何方法。 executeSync() – 等到我有结果,返回结果。 executeAsync() – 立即返回一个Future,如果需要,可以在其他事情完成后处理。 它们将传递具有用户ID和超时值的DataKey对象。 我们将根据用户ID确定调用哪台计算机,然后使用该计算机创建一个URL,我们将使用AsyncRestTemplate对URL进行http调用,然后根据它是否成功将响应发送给它们。 我正在使用AsyncRestTemplate 交换方法返回一个ListenableFuture ,我希望在基于NIO的客户端连接中使用异步非阻塞架构,以便请求使用非阻塞IO,这就是我使用AsyncRestTemplate的原因。 这种方法对我的问题定义是否合适? 该库将在非常重的负载下用于生产。 以下是我的界面: public interface Client { // for synchronous public DataResponse executeSync(DataKey key); // for asynchronous public ListenableFuture executeAsync(DataKey key); } 以下是我对界面的实现: public class DataClient implements Client { // using spring 4 AsyncRestTemplate private final AsyncRestTemplate restTemplate = new AsyncRestTemplate(); […]

Java 8是否缓存了对供应商的支持?

番石榴图书馆拥有自己的Supplier ,不会扩展Java 8 Supplier 。 番石榴也为供应商提供了一个缓存 – Suppliers#memoize 。 是否有类似的东西,但对于Java 8供应商?

性能方面,番石榴图书馆有多好?

我已经浏览了Google Guava库,并在其中创建了许多优秀,可用的数据结构。 如果有其他人使用过它,那么你可以提供有关它与大数据集一起使用时的表现的反馈吗? 基本上我正在为其运营寻找BigO表示法。 提前致谢

Java:如何在没有迭代的情况下从List 转换为Map

我有一个对象列表,我需要转换为一个映射,其中键是每个元素的函数,值是每个元素的另一个函数的列表。 实际上,这是通过它们的function对元素进行分组。 例如,假设一个简单的元素类: class Element { int f1() { … } String f2() { … } } 以及这些的清单: [ { f1=100, f2=”Alice” }, { f1=200, f2=”Bob” }, { f1=100, f2=”Charles” }, { f1=300, f2=”Dave” } ] 那我想要一张如下地图: { {key=100, value=[ “Alice”, “Charles” ]}, {key=200, value=[ “Bob” ]}, {key=300, value=[ “Dave” ]} } 任何人都可以在没有迭代的情况下在Java中建议一种简洁的方法吗? LambdaJ的group方法与Guava的Maps.transform的Maps.transform几乎可以实现,但是group不会生成地图。

番石榴中是否有相应的不可变enumMap?

我最近了解了EnumMap在Java中的优点,并希望将现有的ImmutableMap替换为EnumMap。 但是,我也喜欢ImmutableMap提供的不可变属性。 是否有一个变体,在guava中可用的ImmutableEnumMap? 在存储方面哪一个(EnumMap与ImmutableMap)表现更好? 我找不到两者的比较。 如果有人能指出我的链接或对两个数据结构的效率有一些见解,我会很感激吗?

为什么it.next()抛出java.util.ConcurrentModificationException?

final Multimap terms = getTerms(bq); for (Term t : terms.keySet()) { Collection C = new HashSet(terms.get(t)); if (!C.isEmpty()) { for (Iterator it = C.iterator(); it.hasNext();) { BooleanClause c = it.next(); if(c.isSomething()) C.remove(c); } } } 不是SSCCE,但你能闻到气味吗?

番石榴缓存并保留已检查的exception

我正在重构一些使用番石榴缓存的代码。 初始代码: public Post getPost(Integer key) throws SQLException, IOException { return PostsDB.findPostByID(key); } 为了不破坏某些东西,我需要保留任何抛出的exception,而不包装它。 目前的解决方案看起来有些难看 public Post getPost(final Integer key) throws SQLException, IOException { try { return cache.get(key, new Callable() { @Override public Post call() throws Exception { return PostsDB.findPostByID(key); } }); } catch (ExecutionException e) { Throwable cause = e.getCause(); if (cause instanceof SQLException) […]

NoSuchMethodError:com.google.common.base.Stopwatch.createStarted()Lcom / google / common / base / Stopwatch

我的应用程序正在抛出NoSuchMethodError: com.google.common.base.Stopwatch.createStarted()Lcom/google/common/base/Stopwatch错误。 不知道为什么,因为16.0.1确实包含那个类,我已经检查了。 根据我的研究,看起来这是一个错误? 我也有这个代码用于引用,但我认为这不是问题: FirewallRule rule = new PeriodicFirewallCounterRule(60, TimeUnit.SECONDS, new IpAddressCountingPolicy()); ((PeriodicFirewallCounterRule)rule).addHandler(new RateLimitationHandler(new UniqueLimitPolicy(10))); FirewallFilter firewallFiler = new FirewallFilter(getContext(), list(rule)); firewallFiler.setNext(ma); 我的应用程序正在使用Restlet APISpark: org.restlet.gae org.restlet.ext.apispark ${version.restlet} 运行并访问应用程序的REST API时,会抛出此错误: [INFO] Caused by: java.lang.NoSuchMethodError: com.google.common.base.Stopwatch.createStarted()Lcom/google/common/base/Stopwatch; [INFO] at org.restlet.ext.apispark.internal.firewall.rule.counter.PeriodicCounter.(PeriodicCounter.java:65) [INFO] at org.restlet.ext.apispark.internal.firewall.rule.PeriodicFirewallCounterRule$1.load(PeriodicFirewallCounterRule.java:86) [INFO] at org.restlet.ext.apispark.internal.firewall.rule.PeriodicFirewallCounterRule$1.load(PeriodicFirewallCounterRule.java:84) [INFO] at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3599) [INFO] at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2379) [INFO] at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2342) [INFO] at […]

为什么Guava类提供了如此多的工厂方法而不是只提供varargs的方法?

可能重复: 为什么Guava的ImmutableList有这么多重载的()方法? 看看Guava的ImmutableList (以及其他一些类),你会发现大量的方便方法(“返回包含给定元素的不可变列表,按顺序。”),它们采用不同数量的参数: … public static ImmutableList of(E e1, E e2, E e3) public static ImmutableList of(E e1, E e2, E e3, E e4) public static ImmutableList of(E e1, E e2, E e3, E e4, E e5) … 一直到这个: public static ImmutableList of(E e1, E e2, E e3, E e4, E e5, E e6, […]