在 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/12/17 浏览次数:217 分类:Java
-
本篇文章主要介绍如何在 Java 中制造程序延迟。本教程介绍了如何在 Java 中制造程序延时,并列举了一些示例代码来了解它。
如何在 Java 中把 Hashmap 转换为 JSON 对象
发布时间:2023/12/17 浏览次数:187 分类:Java
-
它描述了允许我们将哈希图转换为简单的 JSON 对象的方法。本文介绍了在 Java 中把 Hashmap 转换为 JSON 对象的方法。我们将看到关于创建一个 hashmap,然后将其转换为 JSON 对象的详细例子。
如何在 Java 中按值排序 Map
发布时间:2023/12/17 浏览次数:171 分类:Java
-
本文介绍了如何在 Java 中按值对 Map 进行排序。本教程介绍了如何在 Java 中按值对 Map
进行排序,并列出了一些示例代码来理解它。
如何在 Java 中打印 HashMap
发布时间:2023/12/17 浏览次数:192 分类:Java
-
本帖介绍了如何在 Java 中打印 HashMap。本教程介绍了如何在 Java 中打印 HashMap 元素,还列举了一些示例代码来理解这个主题。
在 Java 中更新 Hashmap 的值
发布时间:2023/12/17 浏览次数:146 分类:Java
-
本文介绍了如何在 Java 中更新 HashMap 中的一个值。本文介绍了如何在 Java 中使用 HashMap 类中包含的两个方法-put() 和 replace() 更新 HashMap 中的值。
Java 中的 hashmap 和 map 之间的区别
发布时间:2023/12/17 浏览次数:79 分类:Java
-
本文介绍了 Java 中的 hashmap 和 map 接口之间的区别。本教程介绍了 Java 中 Map 和 HashMap 之间的主要区别。在 Java 中,Map 是用于以键值对存储数据的接口,
在 Java 中获取用户主目录
发布时间:2023/12/17 浏览次数:218 分类:Java
-
这篇文章向你展示了如何在 Java 中获取用户主目录。本教程介绍了如何在 Java 中获取用户主目录,并列出了一些示例代码以指导你完成该主题。
Java 中 size 和 length 的区别
发布时间:2023/12/17 浏览次数:179 分类:Java
-
这篇文章教你如何知道 Java 中大小和长度之间的区别。本教程介绍了 Java 中大小和长度之间的区别。我们还列出了一些示例代码以帮助你理解该主题。
Java 中的互斥锁
发布时间:2023/12/17 浏览次数:111 分类:Java
-
了解有关 Java 中互斥锁的一切,在计算机科学领域,互斥或互斥被称为并发控制的属性。每台计算机都使用称为线程的最小程序指令序列。有一次,计算机在一个线程上工作。为了更好地理解,