Google Places API から取得した Google PlaceSummary オブジェクトのリストがあります。Google プレイス ID でそれらを収集してグループ化したいのですが、要素の順序も保持します。私がうまくいくと思ったのは次のとおりです。
Map<String, List<PlaceSummary>> placesGroupedByPlaceId =
places.stream()
.collect(Collectors.groupingBy(
PlaceSummary::getPlaceId,
LinkedHashMap::new,
Collectors.mapping(PlaceSummary::getPlaceId, toList())
));
しかし、それはコンパイルさえしません。Collectorsの Java API ドキュメントによると、そうあるべきだと思われます。
以前、私はこのコードを持っていました:
Map<String, List<PlaceSummary>> placesGroupedByPlaceId = places.stream()
.collect(Collectors.groupingBy(PlaceSummary::getPlaceId));
ただし、Streams API の標準.collect()
では、後続の要素の順序は保持されませんHashMap
(明らかに、HashMap
s は順序付けされていないため)。LinkedHashMap
Map が各バケットの挿入順序でソートされるように、出力を にしたいと思います。
ただし、私が提案した解決策はコンパイルされません。まず、それはPlaceSummary::getPlaceId
関数ではないと言っているため、認識しません-関数であることはわかっていますが。次に、M に変換できないと表示LinkedHashMap<Object, Object>
されます。M は一般的なコレクションであると想定されているため、受け入れられる必要があります。
LinkedHashMap
Java Stream API を使用して List を に変換するにはどうすればよいですか? それを行うための簡潔な方法はありますか?理解するのが難しすぎる場合は、古い学校の Java 8 より前のメソッドに頼ることができます。
List を LinkedHashMap に変換する際に別のスタック オーバーフローの回答があることに気付きましたが、具体的に繰り返し処理しているオブジェクトを「これ」で収集する必要があるため、これには必要な解決策がありません。