Search
Duplicate

[JAVA] 함수모음 (1)

순서
3
날짜
2022/11/01
사람
상태
Done
2022.
11. 20일 작성
프로젝트를 진행하면서 NPE가 발생할 만한 곳에 방어코드를 작성할때가 많이 있었다.
이를 해결하기위해 작성했던 함수들이 있는데, 기억하기위해 작성.

stream null check

1.
Null 자체가 Stream이 되면 NPE 가 발생한다.
2.
Null 일경우 emptyCollection 리턴.
3.
Null 일경우 emptyList를 리턴.
List<Member> members = null; //error members.stream().filter(Objects::nonNull).forEach( Object -> System.out.println(Object::getUsername)); //ok CollectionUtils.emptyIfNull(members).stream() .filter(("coby").equals(Object::getUsername())).collect(Collectors.toList()); //ok Optional.ofNullable(members) .orElseGet(Collections::emptyList).stream() .filter(("coby").equals(Object::getUsername())).collect(Collectors.toList())
Java
복사
emptyIfNull 함수 설계 빈 값일시 emptyCollection을 리턴한다.
// CollectionUtils 클래스 public static <T> Collection<T> emptyIfNull(Collection<T> collection) { return collection == null ? emptyCollection() : collection; }
Java
복사
컬렉션의 값을 체크할때 CollectionUtils 클래스를 애용하자.
// CollectionUtils 클래스 // 널과 함께, 값을 체크한다. public static boolean isEmpty(Collection coll) { return coll == null || coll.isEmpty(); } public static boolean isNotEmpty(Collection coll) { return !isEmpty(coll); }
Java
복사

partition 메소드

public List divided(List<Long> memberids) { // memberids = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] int partitionSize = 4; List<List<Long>> partition = Lists.partition(memberids, partitionSize); return partition; } // 결과값 [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15]]
Java
복사
partition 메소드는 큰 리스트를 리스트 그룹으로 짤라주는 역할을 한다.
실무에서 왜 partition을 사용했는가? 이는 wherw 절에 조건을 잘라서 넣어주기 위해서다, 너무 많은 데이터를 넣어서 작업을 진행하려다 보면, 슬로우 쿼리가 발생할 뿐만 아니라 in 절에 오라클 같은경우 1000 건으로 제한이 있기 때문이다. 이를 해결하기위해 partition을 사용해서 1000건 이하로만 끊어서 처리하는 경우가 발생 할 수있다.

Stream을 사용해서 map 을 만들때 Function.identity() 함수를 사용

Map<Long, Object> memberMapData = new HashMap<>(); List<Member> members = MemberRepository.getMemberList(); if (CollectionUtils.isNotEmpty(members)) { memberMapData = members.stream() .collect(Collectors.toMap(Member::getMemberId, Function.identity())); }
Java
복사
List를 스트림을 써서 Map으로 변경하는데, key = id 로받고, 해당하는 객체를 그대로 쓰기위해 Function.identity를 사용.