본문 바로가기

JAVA

Map 함수

 

 

 

 


 

compute(K key, BiFunction remappingFunction)

--> 키 존재, 키 안존재 둘 다 --> 수정, 삭제, 추가

 

  • 키가 존재하는 경우:
    • 리매핑 함수가 null을 반환하면: 그 키는 맵에서 삭제
    • 리매핑 함수가 다른 값을 반환하면: 그 값으로 기존의 값을 업데이트합니다.

 

  • 키가 존재하지 않는 경우:
    • 리매핑 함수가 null을 반환하면: 그 키는 맵에 추가되지 않습니다
    • 리매핑 함수가 다른 값을 반환하면: 그 값으로 맵에 새로 추가됩니다.

value == null && 이전에 값이 존재하면 remove()

 

import java.util.HashMap;
import java.util.Map;

public class ComputeExample {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("apple", 5);
        map.put("banana", 3);

        // "apple" 키의 값을 가져와서 1을 추가
        map.compute("apple", (key, value) -> (value != null) ? value + 1 : value);

        // "orange" 키는 존재하지 않으므로 아무 작업도 하지 않음
        map.compute("orange", (key, value) -> (value != null) ? value + 1 : value);

        System.out.println(map); // 출력: {apple=6, banana=3}
    }
}

 

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

public class A_Default {

	public static void main(String[] args) {
		Solution solution = new Solution();
		int[] arr = {100, 100, 100, 100, 270, 270, 500};
		long result = solution.solution(arr);
		System.out.println(result);//4

	}

	static class Solution {
		public long solution(int[] weights) {
			Arrays.sort(weights);
			Map<Integer, Integer> map = new HashMap<>();// 무게, 갯수

			// 중복 되는 숫자 찾기
			// compute 사용
			// key: 무게, value: 개수(0부터 시작)
			for (int w : weights) {
				map.compute(w, (key, value) -> value == null ? 0 : value + 1);

			}

			System.out.println(map);//{500=0, 100=3, 270=1}


			ArrayList<Integer> duplicatedKeyList = new ArrayList<>();
			for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
				if (entry.getValue() >= 1) {
					duplicatedKeyList.add(entry.getKey());
					entry.setValue(0);
				}
			}

			System.out.println(duplicatedKeyList);//[100, 270]


			return 0L;
		}
	}// Solution class end

}// one class end

computeIfPresent(K key, BiFunction remappingFunction)

 

--> key 존재할 경우만 수정, 삭제

 

  • 키가 존재하는 경우:
    • 리매핑 함수가 null을 반환하면: 그 키는 맵에서 삭제
    • 리매핑 함수가 다른 값을 반환하면: 그 값으로 기존 값을 업데이트
  • 키가 존재하지 않는 경우:
    • 리매핑 함수가 호출되지 않으며, 아무 작업도 일어나지 않습니다. (키가 존재하지 않으므로 아무 변화가 없습니다.)

 

 

새로운 value==null --> remove(key)

import java.util.HashMap;
import java.util.Map;

public class ComputeIfPresentExample {
    public static void main(String[] args) {
        Map<Integer, Integer> map = new HashMap<>();

        // 키 1을 추가하고 값 1로 설정
        map.put(1, 1);
        // 키 2를 추가하고 값 2로 설정
        map.put(2, 2);

        // 키 1이 존재하므로 값을 10으로 업데이트
        map.computeIfPresent(1, (key, value) -> 10);
        // 키 2가 존재하므로 값을 null로 설정 (결과적으로 키 2는 삭제됨)
        map.computeIfPresent(2, (key, value) -> null);
        // 키 3이 존재하지 않으므로 아무 일도 일어나지 않음
        map.computeIfPresent(3, (key, value) -> 30);

        System.out.println(map); // 출력: {1=10}
    }
}

 

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

public class A_Default {

	public static void main(String[] args) {
		Solution solution = new Solution();
		int[] arr = {100, 100, 100, 100, 270, 270, 500};
		long result = solution.solution(arr);
		System.out.println(result);//4

	}

	static class Solution {
		public long solution(int[] weights) {
			Arrays.sort(weights);
			Map<Integer, Integer> map = new HashMap<>();// 무게, 갯수

			// 중복 되는 숫자 찾기
			// compute 사용
			// key: 무게, value: 개수(0부터 시작)
			for (int w : weights) {
				map.computeIfPresent(w, (key, value) -> value == null ? 0 : value + 1);

			}

			System.out.println(map);//{}


			ArrayList<Integer> duplicatedKeyList = new ArrayList<>();
			for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
				if (entry.getValue() >= 1) {
					duplicatedKeyList.add(entry.getKey());
					entry.setValue(0);
				}
			}

			System.out.println(duplicatedKeyList);//[]


			return 0L;
		}
	}// Solution class end

}// one class end

 


computeIfAbsent(K key, BiFunction remappingFunction)

--> key가 없는 경우 추가

 

  • 키가 존재하는 경우:
    • 기존의 값을 그대로 반환
  • 키가 존재하지 않는 경우:
    • 리매핑 함수가 null을 반환하면: 그 값으로 map 추가
    • 리매핑 함수가 다른 값을 반환하면: 그 값으로 map 추가
import java.util.HashMap;
import java.util.Map;

public class ComputeIfAbsentExample {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();

        // 기존 키가 있는 경우
        map.put("apple", 10);

        // 키가 존재하지 않으면 1로 설정, 이미 존재하면 기존 값 반환
        int appleCount = map.computeIfAbsent("apple", key -> 1);
        System.out.println("appleCount: " + appleCount); // 출력: appleCount: 10

        // 키가 존재하지 않으면 1로 설정
        int bananaCount = map.computeIfAbsent("banana", key -> 1);
        System.out.println("bananaCount: " + bananaCount); // 출력: bananaCount: 1

        // 현재 Map의 상태 출력
        System.out.println("Map contents: " + map); // 출력: Map contents: {apple=10, banana=1}
    }
}