Convertir lista a map en Java

Rupam Yadav 12 octubre 2023
  1. Convertir lista en map usando ArrayList y HashMap
  2. Convertir lista en map usando Stream y Colectors en Java
  3. Convertir lista en map con ordenar y recopilar en Java
Convertir lista a map en Java

Una List permite mantener una colección ordenada de objetos. Un objeto Map asigna claves a valores. En Java existen varios métodos para convertir una List de objetos en un Map. En este artículo conoceremos algunos de ellos.

Convertir lista en map usando ArrayList y HashMap

La interfaz List en Java permite la recopilación ordenada de objetos y almacenar los valores duplicados. Ofrece métodos basados ​​en índices para actualizar, eliminar, insertar y buscar elementos. También podemos almacenar valores nulos en la List. ArrayList, LinkedList son algunas de las clases que implementan la interfaz List.

La interfaz Map en Java asigna claves únicas a valores y no puede contener claves duplicadas. Tiene métodos útiles para buscar, actualizar e insertar elementos basados ​​en esa clave única. La clase HashMap implementa la interfaz Map.

La clase Book tiene tres variables miembro bookName, author, id y métodos getter para estos atributos. Hemos anulado el método toString() para formatear los datos de la clase Book. Se crea un objeto de la clase Book. El método add() de la interfaz List inserta objetos en la bookList.

Creamos un objeto Map utilizando la clase HashMap, que contiene la clave de tipo Integer y el valor como tipo Book. Usamos un bucle for mejorado en el que usamos el método put() y agregamos todos los datos Book de bookList al map.

El método put() toma dos argumentos. Accedimos al atributo id llamando a getId() y usándolo como clave y almacenando el objeto de clase de libro b como el valor para esa clave en particular. Podemos imprimir el objeto bookMap como se muestra en la salida.

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());
  }
}

Producción :

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 lista en map usando Stream y Colectors en Java

Es fácil usar la función lambda con Stream y Collectors en Java 8 para lograr la tarea anterior. El método stream() devuelve un Stream de objetos de la clase Book de la bookList.

Para recopilar estos elementos, utilizamos el método collect() de la clase Stream. Los elementos se recopilarán en un map, así que usamos este Collectors.toMap(). La clave es el id y almacena el objeto Book como valor. Al imprimir el resultado1 como salida, podemos ver que convertimos bookList en un 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);
  }
}

Producción :

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 lista en map con ordenar y recopilar en Java

Podemos ordenar el flujo del objeto de clase Book de bookList comparando el id en orden inverso. Primero llamamos a comparingInt() donde pasamos el id que es de tipo int y luego invertimos el orden llamando al método reverse().

Podemos recopilar el flujo ordenado en un objeto de clase Map. Si hay una clave duplicada, que es 2 en nuestro caso, entonces el map tomará el nuevo valor para la misma clave que explica (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);
  }
}

Producción :

Result 1 : {2=Book{ bookName='The Debt to Pleasure', author='John Lanchester'}, 1=Book{ bookName="Barney's Version", author='Mordecai Richler'}}
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

Artículo relacionado - Java List

Artículo relacionado - Java Map