Map을 반복 / 정렬 / 교체 / 삭제 / 합치기

라헬·2022년 12월 25일
0

먼저 반복하는 forEach 메서드의 사용법은
ageOfPp.forEach((pp, age) -> System.out.println( pp + " is " + age + " years old" ));

정렬하는 메서드는 키 / 값 을 기준으로 정렬할 수 있다.

	Map<String, String> movies = Map.ofEntries( Map.entry("헤르미온느", "해리포터"),
			Map.entry("록시", "시카고"),
			Map.entry("벨마", "시카고"),
			Map.entry("에일린", "몬스터") );
	
				
	       System.out.println("movies"+ movies);
	       
			movies.entrySet().stream()
			.sorted(Entry.comparingByKey())
			.forEachOrdered(System.out::println); // 키값인 이름을 순서대로 처리

그래서 출력결과가
movies{벨마=시카고, 헤르미온느=해리포터, 록시=시카고, 에일린=몬스터}
록시=시카고
벨마=시카고
에일린=몬스터
헤르미온느=해리포터

이렇게 나온다.

키가 존재하지만 value 값이 null인 상황이면 객체.getOrDefault("나는키값","널이면출력") 이렇게 처리할 수도 있다.

computeIfAbsent : 제공된 키에 맞는 값이 없으면, 널이라면 키를 이용해서 새로운 값을 계산하고 맵에 추가함
computeIfPresent : 제공된 키가 존재하면 새값을 계산하고 맵에 추가
compute : 제공된 키로 새값을 계산하고 맵에 저장

lines.forEach(line ->
dataToHash.computeIfAbsent(line, // 맵에서 찾을 키
this::calculateDigest)); // 키가 존재하지 않으면 실행할 거

movies.computeIfAbsent("록시", name -> new ArrayList<>())
.add("시카고");

computeIfPresent는 현재 키와 관련된 값이 맵에 존재해서 널이 아닐때만 계산하는 것인데

movies.remove(key, value);

이렇게 사용하면 된다

지정된 키와 연관된 값이 없거나 널이면 merge를 사용해서 키를 널이 아닌 값과 연결하거나 연결된 값을 주어진 매핑 함수의 결과 값으로 대치하거나 결과가 널이면 항목을 제거시킬 수 있다.

moviesCount.merge(movieNm, 1L, (key, count) -> count + 1L);

forEach : 각 키, 값 쌍에 주어진 액션을 실행
reduce : 모든 키, 값 쌍을 제공된 리듀스 함수로 결과로 합침
search : 널이 아닌 값을 반환할 때까지 키,값 쌍에 함수를 적용

profile
성장하고 싶은 풀스택 개발자

0개의 댓글