Java 는 if 판 공 논리 대신 Optional 과 Stream 을 어떻게 사용 합 니까(JDK 8 이상)

3509 단어 자바optionalstream
본 고 를 통 해 업무 논리 에서 null 검 사 를 아주 짧 은 코드 로 대체 할 수 있 으 며 빈 포인터 가 나 올 때 로그 나 다른 조작 을 쉽게 할 수 있 습 니 다.
주:자바 8 의 새로운 특성 중의 lambda 표현 식 과 Stream 에 익숙 하지 않 은 것 은 기 초 를 보충 하고 개념 을 이해 할 수 있 습 니 다.
우선 아래 코드 에 있 는 List 는 많은 Person 대상 을 넣 었 습 니 다.그 중 어떤 대상 은 null 입 니 다.Person 을 호출 하 는 getXXX()방법 을 검증 하지 않 으 면 빈 포인터 가 잘못 되 었 을 것 입 니 다.일반적으로 우리 가 취 하 는 방안 은 if 판단 을 추가 하 는 것 입 니 다.

public class DemoUtils {

  public static void main(String[] args) {
    List<Person> personList = new ArrayList<>();
    personList.add(new Person());
    personList.add(null);
    personList.add(new Person("  ",10));
    personList.add(new Person("  ",12));
    
    for (Person person : personList) {
    //if    
      if (person != null) {
        System.out.println(person.getName());
        System.out.println(person.getAge());
      }
    }
  }

  static class Person {
    private String name;
    private int age;

    public Person() {
    }

    public Person(String name, int age) {
      this.name = name;
      this.age = age;
    }

    public String getName() {
      return name;
    }
    public void setName(String name) {
      this.name = name;
    }
    public int getAge() {
      return age;
    }
    public void setAge(int age) {
      this.age = age;
    }
  }
}
사실 자바 의 새로운 기능 인 Stream API 와 Optional 은 더욱 우아 한 방법 을 제공 합 니 다.
Stream API 의 filter 를 이용 하여 대기 열 에 있 는 빈 대상 을 걸 러 냅 니 다.filter(Objects:nonNull)는 list 에 있 는 모든 요소 가 Objects 의 nonNull()방법 을 실행 하고 false 요 소 를 되 돌려 주 며 true 로 돌아 가 는 요 소 를 유지 한 다 는 뜻 입 니 다.

 public static void main(String[] args) {
    List<Person> personList = new ArrayList<>();
    personList.add(new Person());
    personList.add(null);
    personList.add(new Person("  ",10));
    personList.add(new Person("  ",12));

    personList.stream().filter(Objects::nonNull).forEach(person->{
      System.out.println(person.getName());
      System.out.println(person.getAge());
    });
  }
예 를 들 어 personList 자체 도 null 일 수 있 습 니 다.업무 논리 에서 personList 가 null 이 라 고 요구 할 때 로그 경 보 를 하면 optional 로 우아 하 게 실현 할 수 있 습 니 다.

public static void main(String[] args) {
  List<Person> personList = new ArrayList<>();
  personList.add(new Person());
  personList.add(null);
  personList.add(new Person("  ", 10));
  personList.add(new Person("  ", 12));

  Optional.ofNullable(personList).orElseGet(() -> {
    System.out.println("personList null!");
    return new ArrayList<>();
  }).stream().filter(Objects::nonNull).forEach(person -> {
    System.out.println(person.getName());
    System.out.println(person.getAge());
  });
}
코드

orElseGet(() -> {
  //  log
  System.out.println("personList null!");
  return new ArrayList<>();
})
personList 가 null 이면 이 두 개의 코드 를 실행 하고 요소 가 없 는 List 를 되 돌려 줍 니 다.그러면 personList 가 null 일 때 빈 포인터 오 류 를 알 리 지 않 고 로 그 를 쳤 습 니 다.
총결산
이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기