I have List of **MainEntity**

```
public class MainEntity {
private String keyword;
private double cost;
private String company;
}

```

and I have **CompanyEntity**

```
public class CompanyEntity {
    private double cost;
    private String company;
    }

```

I am trying to transform my list into `Map<String,List<CompanyEntity>>` where key will be `keyword` and `List<CompanyEntity>` will have average of all the costs and sorted too. I am trying to do it in stream and Java 8.

For a particular keyword as input I am doing this.

```
List<MainEntity> entityList = keyWordMap.get(entity.getKeyword());
        entityList.add(entity);
        keyWordMap.put(entity.getKeyword(), entityList);

Map<String, Double> average = (keyWordMap.get(keyword)).stream()
            .collect(groupingBy(MainEntity::getCompany,
                    Collectors.averagingDouble(MainEntity::getCtr)));
    result.put(keyword, new ArrayList<>());

    for (Map.Entry<String, Double> entity : average.entrySet()) {
        result.get(keyword).add(new CompanyEntity(entity.getKey(), entity.getValue()));
    }

```

But I trying to create a map for all keywords. Is is possible or iterating whole list again makes sense?
Currently `keyowordMap` is of type `Map<String,MainEntity>` which I did by iterating list of `MainEntity`, but I want `Map<String,List<MainEntity>>`.