이번 프로젝트에서 Optional이란걸 알았다 학원에서 기본적인것 을 배웠고 그것이 끝이고 "실전에서는 이것을 어떻게 활용할 것인가"에 초점이 맞춰있었지만 이것이 독이였다.

자바의 버전이 다를 수록 좋은 기능들이 생겨난다 내가 학원에서 배운 기초적인건 정말 예전 자료 토대로 배운느낌이다.

.orElseThrow(), Stream().findFirst() 알기전 나의 코드, 매개변수로 list로 들어온 users(유저정보들)에 한명의 유저만 insert 하고싶은 상황이였다 stream().filter() 로 필터링을하여 그냥 객체로 받고싶었지만 .collect(Collectors.toList()) 으로 list로 받을 수 밖에 없는상황이다.

    @Transactional
    public int insertUser(List<User> users, AdminDto adminUser, String insertName) {
        List<User> insertUser = items.stream()
                .filter(insertInfo -> insertInfo.getUsetName.equals(insertName)))
                .collect(Collectors.toList());

        return  userMapper.inserUser(insertUser.get(0), adminUser.getAdminUserId());
    }

.orElseThrow(), Stream().findFirst() 알고 난 후 나의 코드 무조건 매개변수로 들어온 list에는 insert할 user에는 PK값으로 자동생성되는 UserId가 null이기에 Object.inNull()로 null체크를 하고  .findFirst() 를 이용 하여 객체를 받을 수 있을 뿐더러 .orElseThrow() 를 이용하여 없을경우 까지 생각 할 수 있는 코드가 되었다!

    @Transactional
    public int insertUser(List<User> users, AdminDto adminUser, String insertName) {
        User insertUser = items.stream()
                .filter(insertInfo -> Objects.isNull(insertInfo.getUserNo()))
                .findFirst()
                .orElseThrow(() -> new IllegalArgumentException(String.format("%s 는 user에 없는 name 입니다.", insertName)));

        return userMapper.inserUser(insertUser, adminUser.getAdminUserId());;
    }

 

.ifPresent() 를 활용해보기, 위 메소드들을 더욱 간단하게 처리할 수 있는 방법은 .ifPresent()를 이용하여 다음 처리할 코드를 작성하는것이다. .ifPresent() 는 null를 체크하는방법이다.

    @Transactional
    public int insertUser(List<User> users, AdminDto adminUser, String insertName) {
        return User insertUser = items.stream()
                .filter(insertInfo -> Objects.isNull(insertInfo.getUserNo()))
                .findFirst()
                .ifPresent(insert -> userMapper.inserUser(insert, adminUser.getAdminUserId()));
    }
복사했습니다!