반응형
Java map object value to integer Casting
프로젝트를 하고 있는데 이곳은 패턴을 Map을 사용해 데이터베이스에서 값을 가져온다.
한때 Vo객체와 Map객체 패턴을 놓고 뭐가 더 좋네 말들이 많았던 기억이 있는데 내 입장에서는 뭐든 관계없다.
다만, 숫자로 계산을 하는 서비스를 만든다고 한다면 두 패턴의 장단점을 잘 이해하고 사용해야 한다.
데이터베이스에서 Map형태로 값을 가져오게 되면 Number 타입들은 BigDecimal 형태로 Map Object에 담기는 것으로 보인다. 자바로 가져와 Number 값들을 비교나 연산을 하게 되는 어떤 로직들이 들어가게 되면 꼭 숙지해야 된다.
뭐든 캐스팅이 될줄 알았는데 int 캐스팅은 먹질을 않고 to_String을 사용하지 않고 Map에서 iMap.get('invoiceAMt') 형태로 사용하면 에러가 난다.
BigDeciaml을 사용해보니 잘 된다.
데이터를 화면에 찍어보니 숫자는 더블쿼테이션이 없으므로 자동으로 형변환이 되었다는 추측이 들었다.
List<Map<String, Object>> castingList = list.stream()
.map(iMap -> {
log.info("오브젝트 상태의 값 : " + iMap.get("INVOICE_AMT"));
BigDecimal b = new BigDecimal(iMap.get("INVOICE_AMT").toString());
BigDecimal tt = new BigDecimal("0");
// b = BigDecimal.valueOf(iMap.get("INVOICE_AMT"));
log.info("캐스팅 된 결과는 : "+b);
if(b.compareTo(tt) == 1 ){
log.info("0 이상입니다." + b.toString());
}else if(b.compareTo(tt) == 0 ){
log.info("0 이네요" + b.toString());
}else if(b.compareTo(tt) == -1 ){
log.info("0 작네요" + b.toString());
}
//Integer?
log.info("오브젝트 상태의 값 : " + iMap.get("INVOICE_AMT"));
int intNum = Integer.parseInt(iMap.get("INVOICE_AMT").toString());
log.info("int 로 표현 " + intNum);
return iMap;
})
.collect(toList());
로그
반응형
'슬기로운 자바 개발자 생활 > 스프링 및 자바웹 서비스' 카테고리의 다른 글
spring boot soap wsdl 서비스 만들기 (0) | 2024.06.09 |
---|---|
스프링 프레임워크 기본 다지기 (0) | 2023.06.24 |
스프링부트 WebFlux 스트리밍 (1) | 2023.06.11 |
Mybatis에서 Oracle Procedure 사용 (0) | 2023.06.04 |
스프링에서 oracle declare 문 사용해보기 (0) | 2023.05.14 |
댓글