並列ストリームを使用して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);
}
});
});
まず、コードを確認して、何をしているか教えてください。私はこれを単純化できると思う。そこに何か間違っているようです。 > { \t \t \t \t最終セット駅= routes.get(キー - 答えは 'routes.keySet() \t \t \t .parallelStream() \t \t \t .forEach(キー、このようなものを使用することになります); \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