是否有一种聪明的方法可以从一个地图中获取所有值?
我想要一个像这样的方法:
public static <K, V> Collection<V> getAll(Map<K, V> map, Collection<K> keys)
Run Code Online (Sandbox Code Playgroud)
或者已经是番石榴的方式?
我们有一个Webstart客户端,它通过HTTPS使用发送序列化对象与服务器通信java.net.HttpsURLConnection.
在我的本地机器和办公室的测试服务器上,一切都运行得很好,但我遇到了一个非常非常奇怪的问题,这个问题只发生在我们的生产和登台服务器上(偶尔也会发生).我知道这些服务器和我们办公室的服务器之间的主要区别在于它们位于其他地方,与它们的客户端 - 服务器通信速度相当慢,但在此之前它在生产中也能正常工作.
无论如何,这是发生了什么:
Content-Typeon之类的属性之后,客户端HttpURLConnection调用getOutputStream()它来获取要写入的流.
java.net.ConnectException: Connection timed out: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(Unknown Source)
at com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.connect(Unknown Source)
at sun.net.NetworkClient.doConnect(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.protocol.https.HttpsClient.(Unknown Source)
at sun.net.www.protocol.https.HttpsClient.New(Unknown Source)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(Unknown Source)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(Unknown Source)
请注意,这不是a SocketTimeoutException,如果在建立连接之前超时到期,则该connect()方法 …
我只是注意到,有人ImmutableList.of(E[])赞成使用ImmutableList.copyOf(),因为显而易见的原因是,如果在其他地方使用原始数组,则列表不能真正变为不可变.
如果你有一个方法返回一个数组,并且你知道该方法没有保留对数组的引用,并且你的代码不保留对数组的引用而不是传递给它,那该ImmutableList.of()怎么办?
我是不是该...
ImmutableList.of(E[])(似乎是一个坏主意,因为该方法将消失)Collections.unmodifiableList(Arrays.asList())ImmutableList.copyOf()- 这似乎是没有出现性能/资源问题的最佳想法,否则副本是不必要的.我刚刚开始使用Guava代替Google-Collections.Splitter类看起来很酷.但是当我使用它时,像这样:
private static final Pattern p = Pattern.compile(" +");
private static final Splitter usSplitter = Splitter.on(p).trimResults();
Run Code Online (Sandbox Code Playgroud)
我得到一个堆栈转储:
java.lang.NoSuchMethodError: com.google.common.base.Platform.precomputeCharMatcher(Lcom/google/common/base/CharMatcher;)Lcom/google/common/base/CharMatcher;
at com.google.common.base.CharMatcher.precomputed(CharMatcher.java:662)
at com.google.common.base.CharMatcher.<clinit>(CharMatcher.java:69)
at com.google.common.base.Splitter.<init>(Splitter.java:99)
at com.google.common.base.Splitter.on(Splitter.java:208)
Run Code Online (Sandbox Code Playgroud)
javadocs对此"com.google.common.base.Platform"一无所知.所以有点难以猜出出了什么问题.
正如你所看到的,模式很简单.
我已经定义了一个子接口,java.util.Collection它实际上是一个multiset(又名包).它可能不包含null元素,尽管这对我的问题并不重要.接口定义的equals合同正如您所期望的那样:
obj instanceof MyInterfaceobj包含与this(by equals)相同的元素obj 每个元素包含相同数量的重复项现在我想写我的hashCode方法.我最初的想法是:
int hashCode = 1;
for( Object o : this ) {
hashCode += o.hashCode();
}
Run Code Online (Sandbox Code Playgroud)
但是,我注意到com.google.common.collect.Multiset(来自Guava)定义了哈希码,如下所示:
int hashCode = 0;
for( Object o : elementSet() ) {
hashCode += ((o == null) ? 0 : o.hashCode()) ^ count(o);
}
Run Code Online (Sandbox Code Playgroud)
令我感到奇怪的是,一个空的Multiset会有哈希码0,但更重要的是,我不理解^ count(o)简单地添加每个副本的哈希码的好处.也许这不是一次多次计算相同的哈希码,但为什么不* count(o)呢?
我的问题:什么是有效的哈希码计算?在我的情况下,元素的计数不能保证很便宜.
我在使用Java 1.6(1.6.0_02或1.6.0_04)运行Red Hat Linux(内核版本为2.4.21-37.ELsmp)的测试机器上遇到问题.问题是,一旦在单个线程组中创建了一定数量的线程,操作系统就不愿意或不能再创建了.
这似乎是特定于Java创建线程,因为C线程限制程序能够创建大约1.5k线程.此外,Java 1.4 JVM不会发生这种情况......它可以创建超过1.4k的线程,尽管它们显然在操作系统方面的处理方式不同.
在这种情况下,它切断的线程数仅为29个线程.这是可测试与刚刚创建线程,直到它得到一个错误,然后打印创建的线程数的简单的Java程序.错误是
java.lang.OutOfMemoryError: unable to create new native thread
这似乎是由事不受影响如由其他进程或用户或该系统中的时间被使用的存储器的总量的使用的线程数.JVM设置,如X毫秒,XMX和XSS似乎没有任何改变任何东西(预计,考虑这个问题似乎是与本地操作系统线程创建).
"ulimit -a"的输出如下:
core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited file size (blocks, -f) unlimited max locked memory (kbytes, -l) 4 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 stack size (kbytes, -s) 10240 cpu time (seconds, -t) unlimited max user processes (-u) 7168 virtual memory (kbytes, -v) unlimited
用户进程限制似乎不是问题.搜索可能出错的信息并没有太多,但这篇文章似乎表明至少有一些Red …
这是一个简单的问题,但我遇到了问题......
我正在尝试Objects.equal()在GWT客户端代码中使用Google通用集合的方法,但我一直在收到错误
20:12:10.001 [错误] [gwt_regex]第39行:没有源代码可用于com.google.common.base.Objects类型; 你忘了继承一个必需的模块吗?
尝试谷歌的答案,但没有找到任何答案 - 每个人都只是说"谷歌收集应该与GWT一起开箱即用".
例如,它可以用作静态变量吗?
public static Ordering<String> BY_LENGTH_ORDERING = new Ordering<String>() {
public int compare(String left, String right) {
return Ints.compare(left.length(), right.length());
}
};
Run Code Online (Sandbox Code Playgroud) 我有一个Boolean类型的ArrayList,需要在我尝试使用时作为boolean []进行操作:
AlertDialog builder;
builder.setMultiChoiceItems(items, checkedItems, new DialogInterface.OnMultiChoiceClickListener() { ... });
Run Code Online (Sandbox Code Playgroud)
然而,虽然我可以创建一个布尔对象数组,但我找不到一种有效的方法将这个对象数组转换为构造函数所需的基本数组(我能想到的唯一方法是迭代Object数组并构建一个新的原始数组).
我从ArrayList中检索我的Object数组,如下所示:
final Boolean[] checkedItems = getBoolList().toArray(new Boolean[getBoolList().size()]);
Run Code Online (Sandbox Code Playgroud)
我可以用ArrayList做些什么吗?或者是否有一个我遗漏的明显的转换/转换方法?
任何帮助赞赏!
我必须使用MultiMap实现Priority Queue.我使用Google Collections中的MultiMap.以下代码创建了一个MultiMap,并在其中添加了一些元素.
Multimap<Integer, String> multimap = HashMultimap.create();
multimap.put(5,"example");
multimap.put(1,"is");
multimap.put(1,"this");
multimap.put(4,"some");
Run Code Online (Sandbox Code Playgroud)
现在我的问题是如何编写pop方法?
我认为应该有一个for循环,它应该迭代通过MultiMap.
最低的键应该是最高优先级,所以在C++中我会设置一个指向第一个元素的指针并递增它.怎么用Java做?