Java 迭代列表的嵌套映射

时间:2021-01-29 22:09:54

标签: java java-8 java-stream

我目前有一张地图 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() 将条目列表展平,但无法通过。

1 个答案:

答案 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)))));
相关问题