Java8流从地图中提取数据

Java8流从地图中提取数据,java,java-8,java-stream,Java,Java 8,Java Stream,我有一个Map extracteddata,我想提取一些数据作为返回结果。我对streamapi还很陌生,我不知道我该做什么。我试过了 public Map<String,ExtractedData> getExtractedData(String name) { return extractedDatas.entrySet().stream() .filter(entry -> entry.getKey().startsWith(name))

我有一个
Map extracteddata
,我想提取一些数据作为返回结果。我对streamapi还很陌生,我不知道我该做什么。我试过了

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(...);
}
publicmap getExtractedData(字符串名称)
{
返回extractedDatas.entrySet().stream()
.filter(entry->entry.getKey().startsWith(name))
.filter(条目->条目.getValue().getFieldValue()!=null&&entry.getValue().getFieldValue()!=“”)
.收集(收集器.托马普(…);
}

我必须在
收集器.toMap
中放入什么?

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

在您的例子中,它只是流的
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));
}
publicmap getExtractedData(字符串名称)
{
返回extractedDatas.entrySet().stream()
.filter(entry->entry.getKey().startsWith(name))
.filter(条目->条目.getValue().getFieldValue()!=null&&entry.getValue().getFieldValue()!=“”)
.collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue));
}

如果您可以更改初始的
地图,则可以做一些不同的操作:

extractedDatas
     .entrySet()
     .removeIf(entry -> 
                 !(entry.getKey().startsWith(name) || 
                   entry.getValue().getFieldValue() != null && entry.getValue().getFieldValue() != "")
                  )
              );

谢谢。我正在尝试使用
.collect(Collectors.toMap(entry->entry.getKey(),entry->entry.getValue());
但是在eclipse中,当我键入
entry时。
我没有
getKey()
也没有
getValue()
即使代码在工作。Map.Entry::getKey,Map.Entry::getValue
Entry->Entry.getKey(),Entry->Entry.getValue()之间有什么区别
?两者都能工作。@tweetysat和tweetysat都是表示函数接口实现的有效方法。第一种是方法引用,第二种是lambda表达式。谢谢,但事实并非如此。