code Java comme:Utilisez parallelStream foreach pour créer HashMap, mais parfois la valeur est vide
List<Detail> DbDetails = ... Like 50000 rows records
Map<Long, List<Detail>> details = new HashMap();
DbDetails .parallelStream().forEach(detail -> {
Long id = detail.getId();
details.computeIfAbsent(id, v -> new ArrayList<>()).add(detail);
});
Then ...
details.entrySet().stream().forEach(e -> {
e.getValue(); // Some value is empty
});
Je suppose que parce que HashMap est thread-dangereux, donc j'utiliser Hashtable au lieu de. Alors ça marche ok, toute la valeur a de la valeur, mais je ne sais pas pourquoi?
'HashMap' javadoc (https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html) est assez clair à ce sujet, « Notez que cette mise en œuvre n'est pas Si plusieurs threads accèdent simultanément à une table de hachage, et qu'au moins l'un des threads modifie structurellement la map, il doit être synchronisé de manière externe. " – Misha