Languages/Java

List의 요소 제거에 람다식 적용 removeIf()

반응형

List요소를 받아오는데 앞단에서 input 3개를 무조건 받아오게 되어있어서 1개나 2개만 받아오면 null포인터 익셉션이 떴다.

컨트롤러에서 삭제해주려고 했더니 ConcurrentModificationException이 뜨는 것. 이 익셉션은 이미 다른 파트에서 경험해 본 적이 있는데, 자바의 정책 중 fail-fast라는 정책이라고 한다. 당시 iterator를 사용하여 remove()한 적이 있는데 이번엔 NoSuchElement라고 뜨면서 그게 안 먹히는 것. 엘리먼트가 널값이라 그런게 아닐까 추측.

방법을 좀 더 찾아보다가 JAVA 1.8부터 적용된다는 람다식을 이용한 분이 있길래 따라해보았다. 코드도 간단하고 결과도 잘 나왔다. 넘 좋다.ㅠ_ㅠ

//포지션 등록 승인 요청, 임시저장
@RequestMapping(value="/positionAdd.do", method=RequestMethod.POST)
public String positionAdd_post(@ModelAttribute PositionVO posVo, 
		@RequestParam(value="posJikmus", required=true) List<String> jikmus, HttpSession session) {
	// 전략
    
	jikmus.removeIf(jikmu -> (jikmu == null || jikmu.isEmpty()));
	logger.info("후처리가 끝난 직무 목록 조회 jikmus={}", jikmus);
       
    // 후략
}

 

728x90
반응형