在 Java 中將列表轉換為 map
- 使用 ArrayList 和 HashMap 將 List 轉換為 Map
-
在 Java 中使用
Stream
和Collectors
將列表轉換為 map - 在 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'}}
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