반응형
Notice
Recent Posts
Recent Comments
IT 일기장
[Java] 람다식 - stream 활용 본문
반응형
시작 계기
개발하면서 키 값과 기업명의 상관관계를 :와 ,로 연결해서 데이터를 불러오자고 정의했던게 있었다.
데이터를 넣었을때는 단일로 넣었지만 불러올때는 간편하게 :와 ,로 연결해서 데이터를 불러오고 싶었는데
for문과 forEach문으로 충분히 해결은 가능하지만 불필요한 코드도 줄이고 싶고 성능을 높이고자 시작하게 됐다.
람다식이란?
별도의 명칭을 지정할 필요 없이 이름 없이 그 내용물만 정의한 개념이다.
Java 8 버전 이후 부터 가능하며, 실무적인 장점으로 코드가 간결해진다. 불필요한 루프문의 삭제가 가능하고 동일한 함수를 재활용할 수 있는 여지가 많아지고 필요한 정보만을 사용하는 방식으로 인해 퍼포먼스가 향상된다.
예를 들면
for문은 "1부터 100까지 순차적으로 증가하면서 이 코드를 순차적으로 실행해" 라면
람다식은 "여기 있는거 다하면 돼" 라고 지시하는 느낌이다.
기초 설계
1. 조직/부서에 대한 정보들을 SELECT
2. 키 값과 기업명을 :과 ,로 연결 ex) 1:기업1,2:기업2,3:기업3 ...
사용 예제
전통적인 for 문으로 사용하게 되면..
// 조직/부서 select
List<Map<String, Object>> rowsOrg = bppPorOrgMapper.selectListBppPorOrg(map);
// StringBuilder 선언
StringBuilder ppuDprtSelectBuilder = new StringBuilder();
for (int i = 0; i < rowsOrg.size(); i++) {
// Map 선언
Map<String, Object> rowOrg = rowsOrg.get(i);
// 키값과 기업명 선언
String ppoSeq = StringUtil.isNull(rowOrg.get("ppoSeq"), "");
String ppoNm = StringUtil.isNull(rowOrg.get("ppoNm"), "");
// 둘 다 값이 존재하면 :와 ,로 연결
if (!ppoSeq.equals("") && !ppoNm.equals("")) {
if (ppuDprtSelectBuilder.length() > 0) {
ppuDprtSelectBuilder.append(",");
}
ppuDprtSelectBuilder.append(ppoSeq).append(":").append(ppoNm);
}
}
String ppuDprtSelect = ppuDprtSelectBuilder.toString();
람다식을 사용하게 되면..
// 조직/부서 select
List<Map<String, Object>> rowsOrg = bppPorOrgMapper.selectListBppPorOrg(map);
// 키 값과 기업명을 조회해서 :과 ,로 연결
String ppuDprtSelect = rowsOrg.stream().map(rowOrg -> {
String ppoSeq = StringUtil.isNull(rowOrg.get("ppoSeq"), "");
String ppoNm = StringUtil.isNull(rowOrg.get("ppoNm"), "");
return ppoSeq.equals("") || ppoNm.equals("") ? null : ppoSeq + ":" + ppoNm;
})
.filter(Objects::nonNull) // Null값 제외
.collect(Collectors.joining(","));
반응형
'프로그래밍 언어 > Java' 카테고리의 다른 글
[Java] MVC2 패턴 기본 CRUD 자동 파일 생성 (0) | 2024.11.06 |
---|---|
[Java] POI로 SXSSFWorkbook 엑셀 다운로드 구현 (0) | 2024.08.27 |
[Java] 현재 날짜 및 시간 구하기 (0) | 2024.06.26 |
[Java] LinkedHashMap 사용법과 예제 (0) | 2024.06.25 |
[Java] List<Map<..>>을 Json으로 변환 (0) | 2024.06.18 |
Comments