///
Search
3️⃣

java stream peek, map 사용

java 8 부터 추가된 stream API 의 peek, map을 사용하던 도중 sonaLint를 통하여 peek사용과 map 사용이 잘못된 부분을 확인함. 해당 API를 이런식으로 사용한 이유는 객체의 내부 값을 순차적으로 적용하고 싶었음. 하지만 문제가 발생할 수 있다는 점을 sonaLint에서 발견함.
static <T> ClassModel[] createClassModels(Class<T> clazz) { Function<Field, ClassModel> classModelSupplier = ClassModel::new; SheetStyleConfigurer sheetStyle = ClassModel.createSheetStyle(clazz); AtomicInteger atomicInteger = new AtomicInteger(0); return ReflectionUtils.getDeclaredFields(clazz) .stream() .filter(field -> field.isAnnotationPresent(Column.class)) .map(classModelSupplier) .map(ClassModel :: setColumn) .map(ClassModel :: setDefaultValue) .map(ClassModel :: setFieldName) .map(classModel -> classModel.setPriority(atomicInteger.getAndIncrement())) .map(classModel -> classModel.setSheetStyleConfigurer(sheetStyle)) .map(ClassModel :: setCellStyleConfigurer) .map(ClassModel :: setCellFormat) .toArray(ClassModel[] :: new); }
Java
복사
해당 코드
해당 API의 사용이 문제가 되는 이유
private List<Structure> createStructures(Class<?> clazz) { AtomicInteger atomicInteger = new AtomicInteger(0); return ReflectionUtils.getDeclaredFields(clazz) .stream() .filter(Structure ::existsColumnAnnotation) .map(field -> new Structure(clazz, field, atomicInteger.getAndIncrement())) .collect(Collectors.toList()); }
Java
복사
수정 코드