English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Java 기본 가이드

Java 흐름 제어

Java 배열

Java 객체 지향(I)

Java 객체 지향(II)

Java 객체 지향(III)

Java 예외 처리

Java 목록(List)

Java Queue(큐)

Java Map集合

Java Set集合

Java 입력 출력(I/O)

Java Reader/Writer

Java 다른 주제

Java HashMap merge() 사용 방법 및 예제

Java HashMap 메서드

지정된 키가 존재하지 않으면 Java HashMap merge() 메서드는 지정된 키를/값 매핑이 해시 매핑에 추가됩니다.

하지만 지정된 키가 이미 값과 연결되어 있다면 이 메서드는 오래된 값을 지정된 함수의 결과로 대체합니다.

merge() 메서드의 문법은 다음과 같습니다:

hashmap.merge(key, value, remappingFunction)

merge() 매개변수

merge() 메서드는3개의 매개변수:

  • key -  키(key)와 연결된 값을 지정합니다

  • value - 키(key)가 이미 어떤 값과 연결되어 있다면 키(key)와 연결된 값이 필요합니다

  • remappingFunction - 키(key)가 이미 값과 연결되어 있다면 결과는 키(key)와 연결됩니다.

merge() 반환 값

  • 키(key)와 관련된 새 값을 반환합니다

  • 키(key)와 관련된 값이 없으면 null을 반환합니다

주의:remappingFunction 결과가 null이면 지정된 키의 매핑을 제거합니다.

示例1:HashMap merge() 새 항목 추가

import java.util.HashMap;
class Main {
  public static void main(String[] args) {
    //HashMap 생성
    HashMap<String, Integer> prices = new HashMap<>();
    //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("衬衫的价格: " + returnedValue);
    //打印更新的HashMap
    System.out.println("更新后的 HashMap: ") + prices);
  };
};

출력 결과

HashMap: {Pant=150, Bag=300, Shoes=200}
衬衫的价格: 100
업데이트된 HashMap: {Pant=150, Shirt=100, Bag=300, Shoes=200}

위의 예제에서는 'prices'라는 이름의 해시 매핑을 생성했습니다. 주의하세요

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

여기서는 lambda 표현식 (oldValue, newValue)를 사용했습니다. -> oldValue + newValue)를 remappingFunction 함수로 사용합니다. lambda 표현식에 대해 더 알고 싶다면, 방문해 주세요Java Lambda 표현식

prices에서 Shirt 키가 존재하지 않기 때문에 merge() 메서드는 Shirt=100 삽입 맵. 그리고 remappingFunction의 결과는 무시됩니다.

示例2:HashMap merge() 중복 키에 대한 삽입

import java.util.HashMap;
class Main {
  public static void main(String[] args) {
    // HashMap 생성
    HashMap<String, String> countries = new HashMap<>();
    // HashMap에 항목 추가
    countries.put("Washington", "America");
    countries.put("Canberra", "Australia");
    countries.put("Madrid", "Spain");
    System.out.println("HashMap: ") + countries);
    // Washington 키의 병합 맵
    String returnedValue = countries.merge("Washington", "USA", (oldValue, newValue) -> oldValue + "/" + newValue);
    System.out.println("Washington: ") + returnedValue);
    // 打印更新的HashMap
    System.out.println("更新后的 HashMap: ") + countries);
  };
};

출력 결과

HashMap: {Madrid=Spain, Canberra=Australia, Washington=America}
Washington: America/USA
更新后的 HashMap: {Madrid=Spain, Canberra=Australia, Washington=America/USA},

在上面的示例中,我们创建了一个名为countries的哈希映射。注意表达式

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

在这里,我们使用了lambda表达式(oldValue, newValue) -> oldValue + "/" + newValue) 作为 remappingFunction。

由于键Washington已经存在countries中,所以旧值将由remappingFunction返回的值替换。因此,Washington 的映射包括值 America/USA。

示例3:HashMap merge() 合并两个 HashMap

import java.util.HashMap;
class Main {
  public static void main(String[] args) {
    //HashMap 생성
    HashMap<String, Integer> prices1 = new HashMap<>();
    //HashMap에 항목 추가
    prices1.put("Pant", 230);
    prices1.put("Shoes", 350);
    System.out.println("HashMap 1: " + prices1);
    //另一个hashmap 생성
    HashMap<String, Integer> prices2 = new HashMap<>();
    //HashMap에 항목 추가
    prices2.put("Shirt", 150);
    prices2.put("Shoes", 320);
    System.out.println("HashMap 2: " + prices2);
    // forEach()访问prices2의每个条目
    // merge()将每个条目从prices2插入到prices1
    prices2.forEach((key, value) -> prices1.merge(key, value, (oldValue, newValue) -> {
      
      //較小的值
      if (oldValue < newValue) {
        return oldValue;
      };
      else {
        return newValue;
      };
    });
    System.out.println("합성된 HashMap: " + prices1);
  };
};

출력 결과

HashMap 1: {Pant=230, Shoes=350}
HashMap 2: {Shirt=150, Shoes=320}
합성된 HashMap: {Pant=230, Shirt=150, Shoes=320}

위의 예제에서는 두 개의 이름이 prices1와 prices2의 해시 매핑。주의할 필요가 있습니다.

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

在这里,HashMap forEach()方法访问哈希表prices2的每个条目,并将其合并到哈希表prices1中。 我们使用了两个lambda表达式:

  • (key, value) -> prices.merge(...) - 그리고 prices에 접근합니다1의 각 항목을 가져오고 merge() 메서드에 전달합니다。

  • (oldValue, newValue) -> {...}  - 이는 재지정 함수(remappingFunction)입니다. 두 가지 값을 비교하고 더 작은 값을 반환합니다.

두 개의 해시 맵에서 모두 Shoes 키가 존재하기 때문에, Shoes의 값은 재지정 함수(remappingFunction)의 결과로 대체됩니다.

Java HashMap merge()와 putAll()

두 개의 해시 맵을 합쳐서 putAll() 메서드를 사용할 수도 있습니다. 그러나 두 개의 해시 맵 모두에 키가 존재하면 이전 값은 새로운 값에 대체됩니다

merge()와 달리, putAll() 메서드는 재지정 기능을 제공하지 않습니다. 따라서, 중복 키에 저장할 값을 확정할 수 없습니다.

putAll() 메서드에 대한更多信息를 알고 싶다면 방문하십시오Java HashMap putAll()

Java HashMap 메서드