Java 는 if 판 공 논리 대신 Optional 과 Stream 을 어떻게 사용 합 니까(JDK 8 이상)
주:자바 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 일 때 빈 포인터 오 류 를 알 리 지 않 고 로 그 를 쳤 습 니 다.총결산
이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.