Convertir lista a map en Java
- Convertir lista en map usando ArrayList y HashMap
-
Convertir lista en map usando
Stream
yColectors
en Java - Convertir lista en map con ordenar y recopilar 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 Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedInArtículo relacionado - Java List
- Diferencias entre List y Arraylist en Java
- Dividir una lista en trozos en Java
- Encuentre el índice de un elemento en una lista usando Java
- Lista de filtros en Java
- Obtener el primer elemento de la lista en Java
- Convertir colección a lista en Java