小编hen*_*xin的帖子

使用Java 8 Stream API展平地图并关联值

假设我有一组字符串到整数值的映射:
Map<HashSet<String>, Integer> map = new HashMap<>().

例如,mapis(我们假设没有重复的字符串):

{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键相关联?

lambda functional-programming java-8 java-stream flatmap

4
推荐指数
1
解决办法
1051
查看次数

如何快速跳转到IntelliJ中的类声明行?

假设有一个Foo.java定义Foo类的文件。

光标现在位于的某行上Foo.java光标下方的符号不一定是Foo)。

如何快速跳转到public class Foo {Intellij中的类声明行(即像这样的行)?

有任何捷径吗?


我使用ideavim插件。因此,依赖vim功能的解决方案是可以的。

keyboard-shortcuts intellij-idea ideavim

4
推荐指数
1
解决办法
803
查看次数

Cassandra的文件结构以及如何在Cassandra Cluster Manager(CCM)中指定其目录?

我已经按照Ubuntu 14.04 LTS上的DATASTAX文档成功安装了Cassandra-2.0.9 .为了快速测试本地计算机上的集群,我安装了Cassandra Cluster Manager(CCM)工具.

要创建集群,请ccm create --cassandra-dir *** --nodes 3 --start test发出类似命令,该命令应设置并启动名为"test"的3节点集群.但是,我不确定cassandra目录在我当前的安装下是什么.

我的问题:

  1. 什么cassandra-dir应该被指定?
  2. 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)

ubuntu configuration cassandra datastax cassandra-2.0

3
推荐指数
1
解决办法
1199
查看次数

ConcurrentHashMap上的这种同步是否正确?

我有一个由多个线程访问的键值映射:

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

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

使用Optional Java 8避免在List处理中进行"空检查"

在Class中Site,我有两种实用方法.

第一个,如果没有错误发生parseStub,则解析Site为a ; 否则,它返回.使用:Master nullOptional

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一致?

functional-programming nullable optional java-8 java-stream

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

如何在ConcurrentHashMap中基于getOrDefault()实现原子getOrDefaultWithPut()?

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)
  1. 这个实现是否是线程安全的?
  2. synchronized必要吗?如果它被删除会发生什么不好?
  3. 如果getOrDefaultWithPut(K key, V defaultValue)是唯一的公共方法Wrapper,这个实现是线程安全的并且是synchronized必要的吗?

java collections synchronized concurrenthashmap java.util.concurrent

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