Il est exagéré de dire qu'il est presque essentiel d'utiliser des collections telles que List, Map et Set lors de la programmation en Java. Parmi eux, Map peut gérer les données au format clé-valeur, il est donc souvent utilisé dans des scènes telles que l'acquisition de données à l'avance, leur emballage dans Map et leur réutilisation.
Surtout à partir de Java8, l'API Stream, l'expression lambda, facultatif, etc. ont été ajoutés pour rendre la collection plus facile à utiliser. Mais saviez-vous qu'il existe en fait de nombreuses méthodes utiles ajoutées derrière ces fonctionnalités supplémentaires? Voici quelques méthodes utiles.
Supposons que vous ayez une carte contenant des points pouvant être utilisés au magasin pour chaque code d'adhésion.
Map<String, Integer> pointMap = new HashMap<>();
Dans le cas d'une logique telle que vouloir retourner 0 point lorsqu'un membre ne détient pas de points, vous pouvez l'obtenir en écrivant comme suit.
int point = 0;
//Obtenez des points si vous détenez des points
if (pointMap.containsKey(code)) {
point = pointMap.get(code);
}
C'est gênant et pas beau de juger à chaque fois. C'est là qu'intervient getOrDefault.
int point = pointMap.getOrDefault(code, 0);
Vous pouvez l'écrire proprement en une seule ligne. Vous pouvez écrire un code comme celui-ci lorsque vous souhaitez obtenir une valeur si la carte n'a pas de valeur.
Supposons que vous écriviez une logique pour donner des points uniquement aux membres qui n'ont pas encore de points pour les informations de point.
//Si vous ne détenez pas de points, donnez des points
if (!pointMap.containsKey(code)) {
pointMap.put(code, point);
}
À partir de Java 8, vous pouvez écrire ceci comme suit:
pointMap.putIfAbsent(code, point);
Dans ce code, le point est défini uniquement lorsqu'il n'y a aucun point associé au membre.
Supposons que vous ayez une carte qui ajoute et conserve un historique des résultats des tests d'un élève.
Map<String, List<Integer>> scoreMap = new HashMap<>();
S'il y a un étudiant qui a déjà un score, un nouveau score sera ajouté comme historique après ce score.
List<Integer> scores = scoreMap.get(code);
//Si le score de l'élève n'a pas encore été enregistré
if (scores == null) {
//Créer une liste pour une nouvelle histoire
scores = new ArrayList<>();
scoreMap.put(code, scores);
}
scores.add(score);
Si vous ne pouvez pas l'obtenir à partir de la carte, vous devez définir Liste et ajouter des points à cette liste. Vous pouvez écrire ceci en utilisant computeIfAbsent comme suit:
scoreMap.computeIfAbsent(code, k -> new ArrayList<>()).add(score);
Si aucun résultat de test étudiant n'est conservé, une nouvelle liste est créée et s'il y a déjà des résultats, la liste existante est renvoyée. Puisque les points sont ajoutés à la liste retournée tels quels, il sera possible d'écrire sur une ligne.
Supposons que vous ayez une carte qui contient les jours de présence des étudiants qui ont assisté à un cours, et que le code étudiant des étudiants qui suivent le cours et les jours de présence de 0 sont entrés comme valeurs initiales.
Map<String, Integer> attendanceMap = new HashMap<>();
Si un élève ne suit pas le cours mais vient, il sera ignoré et l'élève qui a suivi le cours augmentera de un le nombre de jours de présence.
if (attendanceMap.containsKey(code)) {
attendanceMap.put(code, attendanceMap.get(code) + 1) ;
}
Vous pouvez écrire ceci en utilisant computeIfPresent comme suit:
attendanceMap.computeIfPresent(code, (k, v) -> v + 1);
computeIfPresent ne fait rien si le code étudiant n'a pas les jours de présence correspondants, et ne peut augmenter la valeur (jours de présence) que s'il y a l'étudiant correspondant.
Java 8 a ajouté de nombreuses fonctionnalités telles que les expressions Stream et lambda, mais en fait, il existe de nombreuses autres fonctionnalités utiles. Il est bon de rechercher sur le net l'API dont vous avez besoin lorsque vous en avez besoin, mais il est également intéressant de lire la documentation officielle de l'API comme vous liriez un dictionnaire.
Recommended Posts