IT 일기장

[Java] 람다식 - stream 활용 본문

프로그래밍 언어/Java

[Java] 람다식 - stream 활용

뽕슈 2025. 4. 23. 16:00
반응형
시작 계기

 

개발하면서 키 값과 기업명의 상관관계를 :와 ,로 연결해서 데이터를 불러오자고 정의했던게 있었다.

데이터를 넣었을때는 단일로 넣었지만 불러올때는 간편하게 :와 ,로 연결해서 데이터를 불러오고 싶었는데

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(","));

 

 

 

 

 

 

 

 

반응형
Comments