我想在不丢失密钥映射的情况下压扁Map将Integer密钥与列表相关联的密钥String.我很好奇,好像用stream和做这样做是有用的和有用的lambda.
我们从这样的事情开始:
Map<Integer, List<String>> mapFrom = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)
我们假设mapFrom填充在某处,看起来像:
1: a,b,c
2: d,e,f
etc.
Run Code Online (Sandbox Code Playgroud)
我们还假设列表中的值是唯一的.
现在,我想"展开"它以获得第二张地图:
a: 1
b: 1
c: 1
d: 2
e: 2
f: 2
etc.
Run Code Online (Sandbox Code Playgroud)
我可以这样做(或非常相似,使用foreach):
Map<String, Integer> mapTo = new HashMap<>();
for (Map.Entry<Integer, List<String>> entry: mapFrom.entrySet()) {
for (String s: entry.getValue()) {
mapTo.put(s, entry.getKey());
}
}
Run Code Online (Sandbox Code Playgroud)
现在让我们假设我想使用lambda而不是嵌套for循环.我可能会这样做:
Map<String, Integer> mapTo = mapFrom.entrySet().stream().map(e -> {
e.getValue().stream().?
// Here I can iterate on …Run Code Online (Sandbox Code Playgroud) 我想建立一个正方形邻接matrix从data.table.这是我已有的可重复的例子:
require(data.table)
require(plyr)
require(reshape2)
# Build a mock data.table
dt <- data.table(Source=as.character(rep(letters[1:3],2)),Target=as.character(rep(letters[4:2],2)))
dt
# Source Target
#1: a d
#2: b c
#3: c b
#4: a d
#5: b c
#6: c b
sry <- ddply(dt, .(Source,Target), summarize, Frequency=length(Source))
sry
# Source Target Frequency
#1 a d 2
#2 b c 2
#3 c b 2
mtx <- as.matrix(dcast(sry, Source ~ Target, value.var="Frequency", fill=0))
rownames(mtx) <- mtx[,1]
mtx <- mtx[,2:ncol(mtx)]
mtx
# b c d …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过 Java使用Vowpal Wabbit。我已经从 GitHub 下载并成功编译了代码。命令行工具工作正常。在快速浏览了存储库(尤其是这里)之后,我只能假设通过 Java 使用它应该已经是可能的,而且我真的不想重新发明轮子。
Vowpal Wabbit 的包装器,允许通过 Java 使用。此包装器设计为自包含的。由于使用了 JNI,因此该 JAR 支持多种平台。
我已经将 maven 依赖项(在这里找到)添加到我的项目中,但是没有任何类型的文档,我真的不知道从哪里开始。我在另一个问题中看到,似乎可以将 VW 与 Java 一起使用,但是这家伙只Runtime.getRuntime.exec()用来调用他的 bash 命令,而我找不到有关任何其他方式的任何文档(并且只有2 个问题在 SO 上混合 VW 和 Java,这无济于事)。我是 JNI 的新手,所以很可能有一些我看不到的简单内容。完全清楚,我的问题是:
Runtime.getRuntime.exec()吗?这似乎不是 JNI 的精神,因为不需要任何包装器/库。另外,这并不使它非常便携。欢迎任何形式的帮助或指导。