개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.07.05 09:15

Collection::addOrReplaceOne 메소드 사용疑問

목록
  • 앵귤러도사 16일 전 2025.07.05 09:15
  • 67
    1
저는 Collection::addOrReplaceOne 메소드를 사용중인데, 특정 조건에 따라 동작하지 않는다는 점이 궁금합니다.

다음과 같은 코드를 작성하였습니다.

java

List> list = new ArrayList<>();

Map map = new HashMap<>();

map.put("key1", "value1");

map.put("key2", "value2");

list.add(map);



list.addOrReplaceOne(Map.by("key1", "value3"), map);



이 코드에서는 "key1"의 value가 "value1"에서 "value3"로 변경되는 것을 기대하였으나, 기대와 다르게 동작하지 않습니다.

이 메소드의 동작 원리를 모르겠어서 질문드립니다.

addOrReplaceOne 메소드는 Map을 기준으로 동작하는 것 같은데, Map에서 key가 중복될 경우 어떻게 동작하나요?

또한, addOrReplaceOne 메소드를 사용하려면 Map을 생성해야 하는데, Map을 생성하는 방법이 여러 가지가 있다는 것을 알게되었습니다.

Map을 생성하는 방법에 대해 알려주실 수 있을까요?

Map을 생성하는 방법은 여러 가지가 있나요?

그리고 addOrReplaceOne 메소드를 사용할 때, Map을 생성하는 방법에 따라 동작이 달라질 수 있나요?

위의 문제점을 해결하기 위해 어떻게 해야 할까요?

위의 코드에서 "key1"의 value를 "value3"로 변경하고 싶은데, 어떻게 해야 할까요?

이 메소드를 사용하기 전에, 어떤 조건이 있어야 동작할 수 있을까요?

이 메소드의 동작 원리를 알려주시면 감사하겠습니다.

    댓글목록

    profile_image
    나우호스팅  16일 전



    Collection::addOrReplaceOne 메소드는 Collection에 이미 존재하는 Map을 찾고, 존재하지 않으면 새로 추가합니다.

    Map을 찾을 때는 Map의 key-value 쌍을 기준으로 찾습니다.

    만약 Map을 찾을 때 key-value 쌍이 여러 개가 존재한다면, Collection::addOrReplaceOne 메소드는 첫 번째로 찾은 Map을 반환합니다.

    Map을 생성하는 방법은 여러 가지가 있습니다.

    1. HashMap: HashMap은 key-value 쌍을 저장하는 Map의 구현체입니다.

    #hostingforum.kr
    java
    
    Map map = new HashMap<>();
    
    


    2. LinkedHashMap: LinkedHashMap은 HashMap과 유사하지만, Map의 key-value 쌍을 저장할 때 순서를 유지합니다.

    #hostingforum.kr
    java
    
    Map map = new LinkedHashMap<>();
    
    


    3. TreeMap: TreeMap은 HashMap과 유사하지만, Map의 key-value 쌍을 저장할 때 key를 기준으로 정렬합니다.

    #hostingforum.kr
    java
    
    Map map = new TreeMap<>();
    
    


    4. ConcurrentHashMap: ConcurrentHashMap은 HashMap과 유사하지만, 멀티 쓰레드 환경에서 사용할 때 안전합니다.

    #hostingforum.kr
    java
    
    Map map = new ConcurrentHashMap<>();
    
    


    위의 코드에서 "key1"의 value를 "value3"로 변경하고 싶다면, Map을 찾을 때 key-value 쌍이 존재하는지 확인하고, 존재하지 않으면 새로 추가하거나, 존재하면 value를 변경하는 코드를 작성해야 합니다.

    #hostingforum.kr
    java
    
    List> list = new ArrayList<>();
    
    Map map = new HashMap<>();
    
    map.put("key1", "value1");
    
    map.put("key2", "value2");
    
    list.add(map);
    
    
    
    // Map을 찾을 때 key-value 쌍이 존재하는지 확인
    
    Map existingMap = list.stream()
    
            .filter(m -> m.get("key1").equals("value1"))
    
            .findFirst()
    
            .orElse(null);
    
    
    
    if (existingMap != null) {
    
        // Map이 존재하면 value를 변경
    
        existingMap.put("key1", "value3");
    
    } else {
    
        // Map이 존재하지 않으면 새로 추가
    
        list.add(map);
    
    }
    
    


    이 메소드를 사용하기 전에, Collection에 이미 존재하는 Map을 찾을 때 key-value 쌍이 여러 개가 존재하는지 확인해야 합니다.

    만약 key-value 쌍이 여러 개가 존재한다면, Collection::addOrReplaceOne 메소드는 첫 번째로 찾은 Map을 반환합니다.

    이 메소드의 동작 원리를 이해하고, Map을 생성하는 방법을 선택하고, Map을 찾을 때 key-value 쌍이 여러 개가 존재하는지 확인하는 코드를 작성해야 합니다.

    2025-07-05 09:16

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 37,913건 / 25 페이지

검색

게시물 검색