簡體   English   中英

Java8 Stream:分組並創建 Map

[英]Java8 Stream: groupingBy and create Map

我想得到以下數據結構: Map<String, Map<String, Integer>>

給定一個 class 或者包含字段 als 基元(位置、目的地、距離)或作為鍵(位置)加上 map(目標)。 從每個獨特的 position 可以定位到許多目的地(按距離)。

private static class LocationPair {
    String position, destination;
    int distance;
}

Map<String, Map<String, Integer>> locations = locationPairs.stream()
    .collect(Collectors.groupingBy(pair -> pair.position, Collectors.toMap(pair.destination, pair.distance)));
private static class LocationPair {
     String position;
     Map<String, Integer> target = Collections.singletonMap(destination, distance);
}

Map<String, Map<String, Integer>> locations = locationPairs.stream()
    .collect(Collectors.groupingBy(pair -> pair.position, Collectors.mapping(pair -> pair.target)));

關於第二個代碼片段:結果應該與第一個代碼相同。唯一的區別是,LocationPair 中提供的數據已經過進一步處理,因此目的地和距離已經放入其目標地圖中。

我知道這一定是可能的,但不知何故我無法弄清楚如何完成它。 上面的流代碼片段將顯示我的意思,盡管我知道它們不起作用。

非常感謝您的幫助

代碼大部分看起來是正確的。 小的調整讓它工作。

        public static Map<String, Map<String, Integer>> locations(List<LocationPair> locationPairs) {
            return locationPairs.stream()
                    .collect(
                            Collectors.groupingBy(LocationPair::getPosition, Collectors.toMap(LocationPair::getDestination, LocationPair::getDistance)));
        }

使用變量而不是方法引用,這變成 -

locationPairs.stream()
                    .collect(
                            Collectors.groupingBy(tmp -> tmp.position, Collectors.toMap(tmp2 -> tmp2.destination, tmp2 -> tmp2.distance)));

希望這可以幫助。 讓我知道以防我錯過了什么

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM