假设我有一组字符串到整数值的映射:
Map<HashSet<String>, Integer> map = new HashMap<>()
.
例如,map
is(我们假设没有重复的字符串):
{x,y} -> 2
{z} -> 3
{u,v,w} -> 4
Run Code Online (Sandbox Code Playgroud)
如何使用Java 8 Stream API获取如下another_map
类型:Map<String, Integer>
x -> 2
y -> 2
z -> 3
u -> 4
v -> 4
w -> 4
Run Code Online (Sandbox Code Playgroud)
它看起来像一个flatMap
操作,但是如何将Integer值与每个String键相关联?
假设有一个Foo.java
定义Foo
类的文件。
光标现在位于的某行上Foo.java
。光标下方的符号不一定是Foo
)。
如何快速跳转到public class Foo {
Intellij中的类声明行(即像这样的行)?
有任何捷径吗?
我使用ideavim
插件。因此,依赖vim功能的解决方案是可以的。
我已经按照Ubuntu 14.04 LTS上的DATASTAX文档成功安装了Cassandra-2.0.9 .为了快速测试本地计算机上的集群,我安装了Cassandra Cluster Manager(CCM)工具.
要创建集群,请ccm create --cassandra-dir *** --nodes 3 --start test
发出类似命令,该命令应设置并启动名为"test"的3节点集群.但是,我不确定cassandra目录在我当前的安装下是什么.
我的问题:
- 什么
cassandra-dir
应该被指定?- Cassandra文件是如何组织的?作为Ubuntu的新手,我对分散在不同目录中的文件感到很困惑.
PS:该命令dpkg -L cassandra
提供以下Cassandra相关文件列表.如果您需要更多信息,请随意询问.谢谢.
/.
/var
/var/lib
/var/lib/cassandra
/var/log
/var/log/cassandra
/usr
/usr/bin
/usr/bin/sstablesplit
/usr/bin/sstablelevelreset
/usr/bin/cassandra-shuffle
/usr/bin/sstable2json
/usr/bin/json2sstable
/usr/bin/cassandra-cli
/usr/bin/nodetool
/usr/bin/sstablekeys
/usr/bin/cqlsh
/usr/bin/cassandra-stress
/usr/bin/token-generator
/usr/bin/sstableloader
/usr/bin/sstablescrub
/usr/bin/sstableupgrade
/usr/bin/sstablemetadata
/usr/share
/usr/share/cassandra
/usr/share/cassandra/apache-cassandra-thrift-2.0.9.jar
/usr/share/cassandra/stress.jar
/usr/share/cassandra/apache-cassandra-2.0.9.jar
/usr/share/cassandra/lib
/usr/share/cassandra/lib/thrift-server-internal-only-0.3.3.jar
/usr/share/cassandra/lib/servlet-api-2.5-20081211.jar
/usr/share/cassandra/lib/high-scale-lib-1.1.2.jar
/usr/share/cassandra/lib/log4j-1.2.16.jar
/usr/share/cassandra/lib/metrics-core-2.2.0.jar
/usr/share/cassandra/lib/antlr-3.2.jar
/usr/share/cassandra/lib/commons-codec-1.2.jar
/usr/share/cassandra/lib/jline-1.0.jar
/usr/share/cassandra/lib/snaptree-0.1.jar
/usr/share/cassandra/lib/concurrentlinkedhashmap-lru-1.3.jar
/usr/share/cassandra/lib/cql-internal-only-1.4.1.zip
/usr/share/cassandra/lib/jamm-0.2.5.jar
/usr/share/cassandra/lib/guava-15.0.jar
/usr/share/cassandra/lib/snakeyaml-1.11.jar
/usr/share/cassandra/lib/slf4j-api-1.7.2.jar
/usr/share/cassandra/lib/thrift-python-internal-only-0.9.1.zip
/usr/share/cassandra/lib/snappy-java-1.0.5.jar
/usr/share/cassandra/lib/json-simple-1.1.jar
/usr/share/cassandra/lib/libthrift-0.9.1.jar …
Run Code Online (Sandbox Code Playgroud) 我有一个由多个线程访问的键值映射:
private final ConcurrentMap<Key, VersionValue> key_vval_map = new ConcurrentHashMap<Key, VersionValue>();
Run Code Online (Sandbox Code Playgroud)
我的自定义get()
和put()
方法遵循典型check-then-act
模式.因此,同步是确保原子性所必需的.为了避免锁定整体ConcurrentHashMap
,我定义:
private final Object[] locks = new Object[10];
{
for(int i = 0; i < locks.length; i++)
locks[i] = new Object();
}
Run Code Online (Sandbox Code Playgroud)
和get()
方法去(它调用get()
的方法ConcurrentHashMap
):
public VersionValue get(Key key)
{
final int hash = key.hashCode() & 0x7FFFFFFF;
synchronized (locks[hash % locks.length]) // I am not sure whether this synchronization is necessary.
{
VersionValue vval = this.key_vval_map.get(key);
if (vval …
Run Code Online (Sandbox Code Playgroud) java multithreading synchronization locking concurrenthashmap
在Class中Site
,我有两种实用方法.
第一个,如果没有错误发生parseStub
,则解析Site
为a ; 否则,它返回.使用:Master
null
Optional
public static Optional<Master> parseStub(Site site) {
// do some parse work; return Optional.empty() if the parse fails.
}
Run Code Online (Sandbox Code Playgroud)
第二种方法parseStubs
是解析的列表Site
到的列表Master
.它重用parseStub
,并且必须处理可能为空的Optional<Master>
:
public static List<Master> parseStubs(List<Site> sites) {
return sites.stream()
.<Master>map(site -> Site.parseStub(site).orElse(null))
.filter(Objects::nonNull)
.collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)
请注意,在上面的代码中,我
null
再次介绍.
我怎么能避免null
(和filter(Objects::nonNull)
)使用Optional
一致?
ConcurrentHashMap支持atomic getOrDefault(Object key, V defaultValue)
,其中
返回指定键映射到的值,如果此映射不包含键的映射,则返回给定的默认值.
我的问题是:
如何
ConcurrentHashMap
通过提供原子操作来增强,比方说getOrDefaultWithPut(Object key, V defaultValue)
,哪个"返回指定键映射,或第一次价值放在了给定的默认值到地图中,然后返回默认值,如果此映射包含的key.`没有映射"
我的解决方案
目前我有一Wrapper
类
private ConcurrentMap<K, V> map = new ConcurrentHashMap<>();
Run Code Online (Sandbox Code Playgroud)
方法是:
public synchronized K getOrDefaultWithPut(K key, V defaultValue)
{
map.putIfAbsent(key, defaultValue);
return map.get(key);
}
Run Code Online (Sandbox Code Playgroud)
- 这个实现是否是线程安全的?
- 有
synchronized
必要吗?如果它被删除会发生什么不好?- 如果
getOrDefaultWithPut(K key, V defaultValue)
是唯一的公共方法Wrapper
,这个实现是线程安全的并且是synchronized
必要的吗?
java collections synchronized concurrenthashmap java.util.concurrent
java ×2
java-8 ×2
java-stream ×2
cassandra ×1
collections ×1
datastax ×1
flatmap ×1
ideavim ×1
lambda ×1
locking ×1
nullable ×1
optional ×1
synchronized ×1
ubuntu ×1