본문 바로가기

Back/Java7

[JAVA] Stream Collectors.groupingBy 널(null) 사용하기 상황 데이터를 grouping 해서 Map으로 리턴해야 하는 상황이다. grouping할 key 값이 nullable한 상황인데, Map의 key값은 null이 될 수 없기때문에 문제가 발생했다. 아래와 같은 exception을 뱉었다. Caused by: java.lang.NullPointerException: element cannot be mapped to a null key 🫥참고로, 만약 그룹핑할 key가 절대로 null이 아니라면 아래와 같이 간단하게 처리할 수 있다. Map map = list.stream().map(li -> new ResponseDto(li) ).collect(Collectors.groupingBy(ResponseDto::getCode)); 해결 ✔️Null값이 있는 Gr.. 2023. 4. 7.
[Java] Stream 스트림으로 중복 값 찾기 Stream Java 8 부터 도입된 Stream을 이용해서 중복 값을 찾는 방법을 알아보자. 방법 ✔️1. Stream.distinct() disticnt() 메서드는 중복되는 요소들을 제거하고 새로운 스트림을 반환한다. 📌 중복된 값을 제거하고 List 반환하기 List list = Arrays.asList("A", "B", "B", "C", "D", "D"); List distinctList = list.stream() .distinct() .collect(Collectors.toList()); // 결과 // [A, B, C, D] 📌 중복된 값이 무엇인지 찾기 List list = new ArrayList( Arrays.asList("A", "B", "B", "C", "D", "D") ); Li.. 2023. 2. 22.
[Java] Optional 개념, 사용법 Optional이란? Java8부터 지원하는 Optional class에 대해 기록하려고 한다. 개발하다 보면 정말 자주 만나게 되는 예외가 바로 NPE(NullpointerException)다. NPE를 내뱉지 않게 하려면 null-safe하게 만들기 위해 null여부를 꼼꼼하게 검사해야 된다. 하지만 그렇게 하다보면 코드가 복잡해지고, 가독성은 떨어지고, 각 변수마다 null값 체크하다보면 프로그래머의 실수로 놓치는 부분이 생길 수 있다. Optional는 null이 올 수 있는 값을 감싸는 Wrapper 클래스로, 참조하더라도 NPE가 발생하지 않도록 도와준다. Optional 을 이용하면 위 문제들을 해결할 뿐만 아니라, 가독성 좋고 NPE를 방지하는 코드를 만들 수 있다. Optional 활용하.. 2023. 2. 21.
[JAVA] Reflection 이용해서 필드값 set 하기 상황 VO클래스에 있는 필드에 접근하여 그 값이 "" (공백)인지 체크하고, "" (공백)이면 null을 set해주어야 한다. 만약 reflection을 사용하지 않고 넘어온 VO를 일일이 확인하고 바꿔주면 코드가 굉장히 중복되게 나열된다. 해결방법 public void changeBlankToNull(TestVo testVo){ // null 변경 처리 ('' -> null) Arrays.stream(ShareholdersMeeting.class.getDeclaredFields()) .filter(field -> { field.setAccessible(true); Object value = null; try { value = field.get(testVo); } catch (IllegalAccessEx.. 2022. 4. 11.
[JAVA] 데이터 직렬화(serialization) 하는 이유 👀궁금증? 프로젝트를 진행하면서 DTO, VO 클래스 명 끝에 implements Serializable 이렇게 붙이는 경우를 많이 봤다. 당장 눈에 보이는 효과는 없는 것 같은데 왜 직렬화를 해주어야 하는지 의문이 생겼다. 아직 100% 이해한 것은 아니지만, 알아본 바 대로 정리해보려고 한다. ✔️private static final long serialVersionUID 는 왜 사용하나? 도메인 객체에 private static final long serialVersionUID = 8999559983943337176L; 이런 식으로 멤버변수가 들어 있는 경우가 있다. 이를 사용하는 이유는 type safety 때문이다. 예를들어 직렬화한 객체를 원격지에 전송을 했다고 했을 경우에 전송된 객체의 클래.. 2022. 2. 11.
[Java] Map안에 List 넣기 📌Map을 사용하려다가 Map의 value값이 List 형태일 때, 어떻게 넣는지 알아보았다. Map map = new HashMap(); String[] temp = {"경기","서울","인천"}; map.put("1", Arrays.asList(temp)); 위 예제와 같은 경우에는 먼저 필요한 데이터를 배열로 선언하고, Arrays.asList()를 사용해서 배열을 List로 바꿔주었다. 그리고 put해주면 끝. 2021. 12. 8.