compute(K key, BiFunction remappingFunction)
--> 키 존재, 키 안존재 둘 다 --> 수정, 삭제, 추가
- 키가 존재하는 경우:
- 리매핑 함수가 null을 반환하면: 그 키는 맵에서 삭제
- 리매핑 함수가 다른 값을 반환하면: 그 값으로 기존의 값을 업데이트합니다.
- 키가 존재하지 않는 경우:
- 리매핑 함수가 null을 반환하면: 그 키는 맵에 추가되지 않습니다.
- 리매핑 함수가 다른 값을 반환하면: 그 값으로 맵에 새로 추가됩니다.
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을 반환하면: 그 키는 맵에서 삭제
- 리매핑 함수가 다른 값을 반환하면: 그 값으로 기존 값을 업데이트
- 키가 존재하지 않는 경우:
- 리매핑 함수가 호출되지 않으며, 아무 작업도 일어나지 않습니다. (키가 존재하지 않으므로 아무 변화가 없습니다.)
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}
}
}