在 Java 中将列表转换为 map
List
允许维护有序的对象集合。Map
对象将键映射到值。在 Java 中,有几种方法可以将对象的 List
转换为 Map
。在本文中,我们将学习其中的一些。
使用 ArrayList 和 HashMap 将 List 转换为 Map
Java 中的 List
接口允许对象的有序集合,并存储重复值。它提供了基于索引的方法来更新、删除、插入和搜索元素。我们还可以在 List
中存储空值。ArrayList
、LinkedList
是一些实现 List
接口的类。
Java 中的 Map
接口将唯一键映射到值,并且不能包含重复键。它具有基于该唯一键搜索、更新和插入元素的有用方法。HashMap
类实现 Map
接口。
Book
类具有三个成员变量 bookName
、author
、id
和这些属性的 getter 方法。我们重写了 toString()
方法来格式化 Book
类数据。Book
类的对象被创建。List
接口的 add()
方法将对象插入 bookList
。
我们使用 HashMap
类创建一个 Map
对象,该类保存 Integer
类型的键和 Book
类型的值。我们使用增强的 for
循环,其中我们使用 put()
方法并将 bookList
中的所有 Book
数据添加到 map 中。
put()
方法有两个参数。我们通过调用 getId()
访问 id
属性并将其用作键并将书类对象 b
存储为该特定键的值。我们可以打印 bookMap
对象,如输出所示。
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());
}
}
输出:
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'}}
在 Java 中使用 Stream
和 Collectors
将列表转换为 map
在 Java 8 中使用带有 Stream
和 Collectors
的 lambda 函数很容易实现上述任务。stream() 方法从 bookList
返回 Book
类对象的 Stream
。
为了收集这些元素,我们使用 Stream
类的 collect()
方法。元素将被收集在一个 map 中,所以我们使用了这个 Collectors.toMap()
。键是 id
并将 Book
对象存储为值。通过打印 result1
作为输出,我们可以看到我们将 bookList
转换为 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);
}
}
输出:
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'}}
在 Java 中使用排序和收集将列表转换为 map
我们可以通过以相反的顺序比较 id
,对 bookList
中的 Book
类对象的流进行排序。我们首先调用 comparingInt()
,我们传递 int
类型的 id
,然后反转调用 reverse()
方法的顺序。
我们可以在 Map
类对象上收集已排序的流。如果有一个重复的键,在我们的例子中是 2
,那么映射将采用解释 (oldValue, newValue) -> newValue
的相同 key
的新值。
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);
}
}
输出:
Result 1 : {2=Book{ bookName='The Debt to Pleasure', author='John Lanchester'}, 1=Book{ bookName="Barney's Version", author='Mordecai Richler'}}
相关文章
在 Java 中的冒泡排序算法对手动链表进行排序
发布时间:2023/10/11 浏览次数:92 分类:Java
-
首先,我们将通过节点示例讨论 Java 中的冒泡排序算法。然后,我们将执行两种方法来演示如何使用手动冒泡排序算法对链表进行排序。
Java 中的 Servlet
发布时间:2023/10/11 浏览次数:88 分类:Java
-
本文介绍了 Java 中的 servlet 技术。本文介绍了 servlet 是什么以及如何在 Java 中创建 servlet。什么是小服务程序
用 Java 创建一个猜数游戏
发布时间:2023/10/10 浏览次数:85 分类:Java
-
任务是为猜谜游戏编写 Java 程序。猜谜游戏是一个约束满足问题。你必须在给定次数的试验中猜出正确的数字;否则,你不会赢。
从 Mac 中卸载 JDK 8
发布时间:2023/10/10 浏览次数:81 分类:Java
-
本文介绍如何从 MacOS 卸载 JDK 8。在过去的几十年里,Java 一直是主要的编程语言之一。它是计算机科学不可或缺的一部分。
Java 中的有限状态机
发布时间:2023/10/10 浏览次数:197 分类:Java
-
本教程演示如何在 Java 中实现有限状态机。有限状态机用于识别模式。本教程演示如何在 Java 中实现有限状态机。
Java 中的位掩码操作
发布时间:2023/10/10 浏览次数:101 分类:Java
-
在 Java 中,位掩码允许我们在一个数值变量中存储多个值。我们将值的每一位都视为一个单独的值,而不是一个整体的单个变量。
Java 中的弱引用类
发布时间:2023/10/10 浏览次数:129 分类:Java
-
本教程演示了 Java 中的弱引用类。弱引用是一种强度不足以使对象保留在内存中的引用。本教程演示了 Java 中弱引用的使用。
用 Java 连接 MySQL 数据库
发布时间:2023/10/10 浏览次数:136 分类:Java
-
这篇文章将演示如何使用 Java 连接 MySQL 数据库。本教程介绍了如何在 Java 中连接 MySQL 数据库。我们还列出了一些示例代码,以便你可以进一步了解该主题。