Hợp nhất Java HashMap ()

Phương thức merge () Java HashMap chèn ánh xạ khóa / giá trị được chỉ định vào bản đồ băm nếu khóa được chỉ định không có mặt.

Nếu khóa được chỉ định đã được liên kết với một giá trị, phương thức sẽ thay thế giá trị cũ bằng kết quả của hàm được chỉ định.

Cú pháp của merge()phương thức là:

 hashmap.merge(key, value, remappingFunction)

Ở đây, hashmap là một đối tượng của HashMaplớp.

merge () Tham số

Các merge()phương pháp có 3 thông số:

  • key - khóa mà giá trị được chỉ định sẽ được liên kết với
  • value - giá trị được liên kết với khóa, nếu khóa đã được liên kết với bất kỳ giá trị nào
  • remappingFunction - kết quả được liên kết với khóa nếu khóa đã được liên kết với một giá trị

merge () Giá trị trả lại

  • trả về giá trị mới được liên kết với khóa
  • trả về nullnếu không có giá trị nào được liên kết với khóa

Lưu ý : Nếu kết quả remappingFunction null, thì ánh xạ cho khóa được chỉ định sẽ bị loại bỏ.

Ví dụ 1: HashMap merge () để Chèn mục nhập mới

 import java.util.HashMap; class Main ( public static void main(String() args) ( // create an HashMap HashMap prices = new HashMap(); // insert entries to the HashMap prices.put("Shoes", 200); prices.put("Bag", 300); prices.put("Pant", 150); System.out.println("HashMap: " + prices); int returnedValue = prices.merge("Shirt", 100, (oldValue, newValue) -> oldValue + newValue); System.out.println("Price of Shirt: " + returnedValue); // print updated HashMap System.out.println("Updated HashMap: " + prices); ) )

Đầu ra

 Bản đồ HashMap: (Quần = 150, Túi = 300, Giày = 200) Giá áo: 100 Bản đồ Hash được cập nhật: (Quần = 150, Áo = 100, Túi = 300, Giày = 200)

Trong ví dụ trên, chúng tôi đã tạo một bản đồ băm có tên là giá. Chú ý biểu thức,

 prices.merge("Shirt", 100, (oldValue, newValue) -> oldValue + newValue)

Ở đây, chúng tôi đã sử dụng biểu thức lambda, (oldValue, newValue) -> oldValue + newValue)làm hàm ánh xạ lại. Để tìm hiểu thêm về biểu thức lambda, hãy truy cập Biểu thức Lambda của Java.

Vì Áo sơ mi khóa không có trong giá, nên merge()phương pháp này sẽ chèn ánh xạ Shirt=100. Và, kết quả từ chức năng ánh xạ lại bị bỏ qua.

Ví dụ 2: HashMap merge () để Chèn mục nhập có khóa trùng lặp

 import java.util.HashMap; class Main ( public static void main(String() args) ( // create an HashMap HashMap countries = new HashMap(); // insert entries to the HashMap countries.put("Washington", "America"); countries.put("Canberra", "Australia"); countries.put("Madrid", "Spain"); System.out.println("HashMap: " + countries); // merge mapping for key Washington String returnedValue = countries.merge("Washington", "USA", (oldValue, newValue) -> oldValue + "/" + newValue); System.out.println("Washington: " + returnedValue); // print updated HashMap System.out.println("Updated HashMap: " + countries); ) )

Đầu ra

 HashMap: (Madrid = Tây Ban Nha, Canberra = Australia, Washington = America) Washington: America / USA Bản đồ HashMap được cập nhật: (Madrid = Tây Ban Nha, Canberra = Australia, Washington = America / USA), 

Trong ví dụ trên, chúng tôi đã tạo một bản đồ băm có tên các quốc gia. Chú ý biểu thức,

 countries.merge("Washington", "USA", (oldValue, newValue) -> oldValue + "/" + newValue)

Ở đây, chúng tôi đã sử dụng biểu thức lambda, (oldValue, newValue) -> oldValue + "/" + newValue)làm hàm ánh xạ lại.

Vì khoá Washington đã có mặt ở các quốc gia, nên giá trị cũ được thay thế bằng giá trị được trả về bằng hàm ánh xạ lại. Do đó, bản đồ cho Washington bao gồm giá trị Châu Mỹ / Hoa Kỳ.

Ví dụ 3: HashMap merge () để hợp nhất hai HashMaps

 import java.util.HashMap; class Main ( public static void main(String() args) ( // create an HashMap HashMap prices1 = new HashMap(); // insert entries to the HashMap prices1.put("Pant", 230); prices1.put("Shoes", 350); System.out.println("HashMap 1: " + prices1); // create another hashmap HashMap prices2 = new HashMap(); //insert entries to the HashMap prices2.put("Shirt", 150); prices2.put("Shoes", 320); System.out.println("HashMap 2: " + prices2); // forEach() access each entries of prices2 // merge() inserts each entry from prices2 to prices1 prices2.forEach((key, value) -> prices1.merge(key, value, (oldValue, newValue) -> ( // return the smaller value if (oldValue < newValue) ( return oldValue; ) else ( return newValue; ) ))); System.out.println("Merged HashMap: " + prices1); ) )

Đầu ra

 HashMap 1: (Pant = 230, Giày = 350) HashMap 2: (Áo = 150, Giày = 320) Bản đồ Hash hợp nhất: (Pant = 230, Áo = 150, Giày = 320)

Trong ví dụ trên, chúng tôi đã tạo hai bản đồ băm có tên là giá1 và giá2. Lưu ý mã,

  prices2.forEach((key, value) -> prices1.merge(key, value, (oldValue, newValue) -> ( if (oldValue < newValue) ( return oldValue; ) else ( return newValue; ) )));

Tại đây, phương thức HashMap forEach () truy cập từng mục nhập của các giá bản đồ băm2 và kết hợp nó với giá bản đồ băm1. Chúng tôi đã sử dụng hai biểu thức lambda:

  • (key, value) -> price.merge (…) - Nó truy cập từng mục nhập của giá1 và chuyển nó đến merge()phương thức.
  • (oldValue, newValue) -> (…) - Đây là một hàm ánh xạ lại. Nó so sánh hai giá trị và trả về giá trị nhỏ hơn.

Vì Giày chính có trong cả bản đồ băm, nên giá trị của Giày được thay thế bằng kết quả của chức năng ánh xạ lại.

Java HashMap merge () Vs. putAll

Chúng ta cũng có thể sử dụng putAll()phương pháp để hợp nhất hai bản đồ băm. Tuy nhiên, nếu một khóa có trong cả hai bản đồ băm, giá trị cũ sẽ được thay thế bằng giá trị mới.

Không giống như merge(), putAll()phương thức không cung cấp chức năng ánh xạ lại. Do đó, chúng tôi không thể quyết định giá trị nào sẽ lưu trữ cho các khóa trùng lặp.

Để tìm hiểu thêm về putAll()phương pháp này, hãy truy cập Java HashMap putAll ().

thú vị bài viết...