請讓我知道是否有可能根據Java 8使用並行流更改以下代碼?使用流的HashMap操作Java 8
我正在尋找一個選項來並行運行「outer for loop」,並最終將所有的stationMap值一起收集起來?
Map<Integer, Set<Integer>> stationMap = new HashMap<>();
Map<Integer, Set<Integer>> routes = function();
for (Map.Entry<Integer, Set<Integer>> entry : routes.entrySet())
{
Set<Integer> stations = entry.getValue();
for (Integer station : stations) {
Set<Integer> temporaryStations = new HashSet<>(stations);
Set<Integer> stationSet = stationMap.get(station);
if (stationSet == null) {
stationSet = new HashSet<>();
temporaryStations.remove(station);
stationSet.addAll(temporaryStations);
stationMap.put(station, stationSet);
} else {
temporaryStations.remove(station);
stationSet.addAll(temporaryStations);
}
}
}
更短的版本:
routes.forEach((k, stations) -> {
stations.forEach((station) -> {
Set<Integer> stationSet = stationMap.get(station);
if (stationSet == null) {
stationSet = new HashSet<>();
stationSet.addAll(stations);
stationMap.put(station, stationSet);
} else {
stationSet.addAll(stations);
}
});
});
首先您可以查看您的代碼並告訴我們您在做什麼?我認爲這可以簡化。看起來有點不妥。答案是使用這樣的事情,'routes.keySet() \t \t \t .parallelStream() \t \t \t .forEach(鍵 - > { \t \t \t \t決勝盤站= routes.get(關鍵); \t \t \t \t站 \t \t \t \t \t .parallelStream()\t \t \t \t \t \t \t \t \t \t \t \t .forEach(V - > stationMap.put(V,站));; \t \t \t});' –
非常感謝。但是stationMap.put(v,station)有一個小問題....我實際上試圖添加以前的站,當我把站設置到stationMap(「stationSet.addAll(temporaryStations);」)時。現在的問題是它取代了現有的集合 – Dev
我試圖得到以前的電臺,並添加它,但它拋出併發修改異常:( – Dev