Convertir une liste en map en Java

Rupam Yadav 12 octobre 2023
  1. Liste à map à l’aide de ArrayList et HashMap
  2. Convertir la liste en map en utilisant Stream et Collectors en Java
  3. Convertir la liste en map avec trier et collecter en Java
Convertir une liste en map en Java

Une List permet de maintenir une collection ordonnée d’objets. Un objet Map mappe les clés aux valeurs. En Java, il existe plusieurs méthodes pour convertir une Liste d’objets en une Carte. Dans cet article, nous en apprendrons quelques-uns.

Liste à map à l’aide de ArrayList et HashMap

L’interface List de Java permet une collection ordonnée d’objets et stocke les valeurs en double. Il offre des méthodes basées sur l’index pour mettre à jour, supprimer, insérer et rechercher des éléments. Nous pouvons également stocker des valeurs nulles dans la List. ArrayList, LinkedList sont quelques-unes des classes qui implémentent l’interface List.

L’interface Map de Java mappe des clés uniques sur des valeurs et ne peut pas contenir de clés en double. Il dispose de méthodes utiles pour rechercher, mettre à jour et insérer des éléments basés sur cette clé unique. La classe HashMap implémente l’interface Map.

La classe Book a trois variables membres bookName, author, id et des méthodes getter pour ces attributs. Nous avons remplacé la méthode toString() pour formater les données de la classe Book. Un objet de la classe Book est créé. La méthode add() de l’interface List insère des objets dans la bookList.

Nous créons un objet Map en utilisant la classe HashMap, qui contient la clé de type Integer et la valeur de type Book. Nous utilisons une boucle for améliorée dans laquelle nous utilisons la méthode put() et ajoutons toutes les données Book de la bookList à la map.

La méthode put() prend deux arguments. Nous avons accédé à l’attribut id en appelant getId() et en l’utilisant comme clé et en stockant l’objet de classe de livre b comme valeur pour cette clé particulière. Nous pouvons imprimer l’objet bookMap comme indiqué dans la sortie.

class Book {
  int id;
  String bookName;
  String author;
  public Book(int id, String bookName, String author) {
    this.id = id;
    this.bookName = bookName;
    this.author = author;
  }

  public int getId() {
    return id;
  }

  public String getAuthor() {
    return author;
  }

  public String getBookName() {
    return bookName;
  }

  @Override
  public String toString() {
    return "Book{"
        + " bookName='" + bookName + '\'' + ", author='" + author + '\'' + '}';
  }
}
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Test {
  public static void main(String[] args) {
    List<Book> bookList = new ArrayList<>();
    bookList.add(new Book(1, "Barney's Version", "Mordecai Richler"));
    bookList.add(new Book(2, "The Unsettlers", "Mark Sundeen"));
    bookList.add(new Book(3, "The Debt to Pleasure", "John Lanchester"));

    Map<Integer, Book> bookMap = new HashMap();
    for (Book b : bookList) {
      bookMap.put(b.getId(), b);
    }
    System.out.println("BookMap " + bookMap.toString());
  }
}

Production :

BookMap {1=Book{ bookName="Barney's Version", author='Mordecai Richler'}, 2=Book{ bookName='The Unsettlers', author='Mark Sundeen'}, 3=Book{ bookName='The Debt to Pleasure', author='John Lanchester'}}

Convertir la liste en map en utilisant Stream et Collectors en Java

Il est facile d’utiliser la fonction lambda avec Stream et Collectors dans Java 8 pour réaliser la tâche ci-dessus. La méthode stream() renvoie un Stream d’objets de la classe Book de la bookList.

Pour collecter ces éléments, nous utilisons la méthode collect() de la classe Stream. Les éléments seront collectés dans une map, nous avons donc utilisé ce Collectors.toMap(). La clé est l’id et stocke l’objet Book en tant que valeur. En imprimant le result1 en sortie, nous pouvons voir que nous avons converti bookList en une map.

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class Test {
  public static void main(String[] args) {
    List<Book> bookList = new ArrayList<>();
    bookList.add(new Book(1, "Barney's Version", "Mordecai Richler"));
    bookList.add(new Book(2, "The Unsettlers", "Mark Sundeen"));
    bookList.add(new Book(3, "The Debt to Pleasure", "John Lanchester"));

    Map<Integer, String> result1 =
        bookList.stream().collect(Collectors.toMap(Book::getId, Book::toString));
    System.out.println("Result 1 : " + result1);
  }
}

Production :

Result 1 : {1=Book{ bookName="Barney's Version", author='Mordecai Richler'}, 2=Book{ bookName='The Unsettlers', author='Mark Sundeen'}, 3=Book{ bookName='The Debt to Pleasure', author='John Lanchester'}}

Convertir la liste en map avec trier et collecter en Java

Nous pouvons trier le flux de l’objet de classe Book de bookList en comparant les id dans l’ordre inverse. On appelle d’abord comparingInt() où on passe le id qui est de type int puis on inverse l’ordre en appelant la méthode reverse().

Nous pouvons collecter le flux trié sur un objet de classe Map. S’il y a une clé en double, qui est 2 dans notre cas, alors la map prendra la nouvelle valeur pour la même key qui explique (oldValue, newValue) -> newValue.

import java.util.*;
import java.util.stream.Collectors;
public class Test {
  public static void main(String[] args) {
    List<Book> bookList = new ArrayList<>();
    bookList.add(new Book(1, "Barney's Version", "Mordecai Richler"));
    bookList.add(new Book(2, "The Unsettlers", "Mark Sundeen"));
    bookList.add(new Book(2, "The Debt to Pleasure", "John Lanchester"));

    Map result1 = bookList.stream()
                      .sorted(Comparator.comparingInt(Book::getId).reversed())
                      .collect(Collectors.toMap(Book::getId, Book::toString,
                          (oldValue, newValue) -> newValue, LinkedHashMap::new));

    System.out.println("Result 1 : " + result1);
  }
}

Production :

Result 1 : {2=Book{ bookName='The Debt to Pleasure', author='John Lanchester'}, 1=Book{ bookName="Barney's Version", author='Mordecai Richler'}}
Auteur: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

Article connexe - Java List

Article connexe - Java Map