Java 8 Stream extract datas from Map

Viewed 1864

I have a Map<String,ExtractedData> extractedDatas and I want to extract some data as return result. I'm quite new with the Stream API and I don't understand what I have to do. I tried with

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(...);
}

What do I have to put in the Collectors.toMap ?

2 Answers

You simply have to pass the functions that map an element of your Stream to both the key and the value of the output Map.

In your case it's simply the key and the value of the Map.Entry elements of the Stream.

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));
}

you could do it a bit different if you are OK altering the initial Map:

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