Java 8 Stream从Map中提取数据

时间:2017-11-16 09:29:05

标签: java java-8 java-stream

我有一个Map<String,ExtractedData> extractedDatas,我想提取一些数据作为返回结果。我对Stream API很新,我不明白我该做什么。我试过

public Map<String,ExtractedData> getExtractedData(String name)
{
    return extractedDatas.entrySet().stream()
            .filter(entry -> entry.getKey().startsWith(name))
            .filter(entry -> entry.getValue().getFieldValue() != null && entry.getValue().getFieldValue() != "")
            .collect(Collectors.toMap(...);
}

我需要在Collectors.toMap中添加什么内容?

2 个答案:

答案 0 :(得分:7)

您只需将映射Stream元素的函数传递给输出Map的键和值。

在您的情况下,它只是流的Map.Entry元素的关键和值。

public Map<String,ExtractedData> getExtractedData(String name)
{
    return extractedDatas.entrySet().stream()
            .filter(entry -> entry.getKey().startsWith(name))
            .filter(entry -> entry.getValue().getFieldValue() != null && entry.getValue().getFieldValue() != "")
            .collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue));
}

答案 1 :(得分:1)

如果你可以改变最初的Map

,你可以做的有点不同
extractedDatas
     .entrySet()
     .removeIf(entry -> 
                 !(entry.getKey().startsWith(name) || 
                   entry.getValue().getFieldValue() != null && entry.getValue().getFieldValue() != "")
                  )
              );