2017-05-04 1 views
2

먼저 데이터가 목록에 있는지 확인한 다음 Java 8 스트림에서 기본값 또는 빈 값을 설정하십시오.Java 8 람다 표현식이 있습니다.

현재 isPresent이 아닌 코드를 사용하고 있습니다 만, java8에서 isPresent를 사용하는 방법을 모릅니다. 내가 뭔가를 시도하고

는 아래 완벽하지 않습니다이 설정되어

String isScheme = (this.mapProgramApproaches.stream().findFirst().isPresent())? this.mapProgramApproaches.stream().findFirst().get().getIsScheme().toString() : "0"; 

경우 mapProgramApproaches한다.

답변

6

isPresent()을 사용하지 마십시오. Stream 파이프 라인을 두 번 실행하면 안됩니다.

당신은 필요한 StringOptional의 값을 매핑 할 map을 사용할 수 있으며, Optional 값이 존재하지 않을 때 다음 사용 orElse()는 기본 값을 반환 :

String isScheme = this.mapProgramApproaches.stream() 
              .findFirst() 
              .map(o->o.getIsScheme().toString()) 
              .orElse("0"); 
4

어쩌면 당신이 찾고있는 다음과 같은 내용 :

String isScheme = this.mapProgramApproaches.stream() 
     .findFirst() 
     .map(p -> p.getIsScheme().toString()) 
     .orElse("0"); 
1

나는이 상황을 잘 모르고 있지만, 나 목표는 계획이고 그 다음에 그걸로 뭔가를하십시오. 이 경우 다음과 같이 구현하는 것이 좋습니다.

List<String> mapProgramApproaches = new ArrayList<>(); 
mapProgramApproaches.stream() 
       .filter(this::isScheme) 
       .findFirst() 
       .ifPresent(this::doYourCode) 
       .orElse(defaultValue); 

코드를보다 명확하게 만듭니다. 추가 조건문을 피하는 데 도움이 될 것입니다!