MainEntityのリストがあります
public class MainEntity {
private String keyword;
private double cost;
private String company;
}
私はCompanyEntityを持っています
public class CompanyEntity {
private double cost;
private String company;
}
私はに私のリストを変換しようとしていMap<String,List<CompanyEntity>>
たキーがされる場所keyword
とList<CompanyEntity>
すべてのコストの平均を持っているとあまりにも並べ替えられます。私はストリームとJava 8でそれをやろうとしています。
入力としての特定のキーワードについて、私はこれを行っています。
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()));
}
しかし、私はすべてのキーワードのマップを作成しようとしています。リスト全体を繰り返すことは可能ですか、それとも意味がありますか?現在keyowordMap
はのMap<String,MainEntity>
リストを反復してやったタイプMainEntity
ですが、欲しいですMap<String,List<MainEntity>>
。
まず、 keyWordMap
Map<String, List<MainEntity>> keyWordMap =
mainEntityList
.stream()
.collect(Collectors.groupingBy(MainEntity::getKeyword));
次に、各キーワードについて、CompanyEntity
平均値で並べ替えのリストを直接取得しmap()
、データを変換してリストとして収集するために使用して、マップを反復処理してから、result
Map<String,List<CompanyEntity>> result = ....
for (Map.Entry<String, List<MainEntity> entry : keyWordMap.entrySet()) {
List<CompanyEntity> list = entry.getValue().stream()
.collect(groupingBy(MainEntity::getCompany,
Collectors.averagingDouble(MainEntity::getCtr)))
.entrySet()
.stream()
.sorted(Comparator.comparing(e -> e.getValue()))
.map(e -> new CompanyEntity(e.getKey(), e.getValue()))
.collect(Collectors.toList());
result.put(entry.getKey(), list);
}
または、これをワンショットで実行したい
Map<String,List<CompanyEntity>> mapData =
mainEntityList
.stream()
.collect(Collectors.groupingBy(MainEntity::getKeyWord,
Collectors.groupingBy(MainEntity::getCtr,
Collectors.averagingDouble(MainEntity::getCtr))))
.entrySet()
.stream()
.collect(Collectors.toMap(m -> m.getKey(),
m -> m.entrySet()
.stream()
.sorted(Comparator.comparing(e -> e.getValue()))
.map(e -> new CompanyEntity(e.getKey(), e.getValue()))
.collect(Collectors.toList())));
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加