我目前有一张地图 Map<String, Map<String, List<String>>>
我想对每个嵌套列表中的每一项进行操作。
我可以用很多嵌套的 for 循环来做到这一点:
(编辑 - 更新 performOperation 函数的参数)
final Set<ResultType> resultSet = new HashSet<>();
for(Map.Entry<String, Map<String, List<String>>> topKeyEntry : inputNestedMap.entrySet()) {
for (Map.Entry<String, List<String>> innerKeyEntry : topKeyEntry.getValue().entrySet()) {
for (String listItem : innerKeyEntry.getValue()) {
resultSet.add(performOperation(listItem, topKeyEntry.getKey(), innerKeyEntry.getKey()));
}
}
}
我如何使用流来做到这一点?
我尝试通过嵌套 stream
并应用 map()
并最终在最里面的映射中调用操作,但这会导致错误,指出缺少返回。
我尝试用 flatMap()
将条目列表展平,但无法通过。
答案 0 :(得分:1)
根据您更新的问题,我发布了以下内容。它本质上是您已经拥有的,但使用 # Query Matrix: count the number of times that
# the word appears - put the counts in the tdm$dimnames$Terms
# vector.
query_vector <- rep(0, length(tdm$dimnames$Terms))
for(i in 1:length(query_split)){
query_vector[which(tdm$dimnames$Terms == query_split[i])] <- 1
}
query_matrix <- as.matrix(query_vector)
# Calculate the cosine similarity between the query and each document.
full_lsa <- cbind(t(lsa), query_lsa)
query_scores <- cosine(full_lsa)
方法以不那么混乱的形式。
forEach
这是基于您的更改的修改后的流方法。我会坚持使用嵌套的 for 循环解决方案。
inputNestedMap.forEach((outerKey, innerMap) -> innerMap
.forEach((innerKey, innerList) -> innerList.forEach(
listItem -> resultSet.add(performOperation(
listItem, outerKey, innerKey)))));