Collection Null and Empty Check
1
2
3
4
5
// common check
if(null == collection
|| collection.isEmpty()){
...
}
1
2
3
4
5
6
// better than
import org.springframework.util.CollectionsUtils;
if(CollectionUtils.isEmpty(collection)){
...
}
Why does Stream.allMatch() return true for an empty stream?
{empty stream}.allMatch == true
{empty stream}.noneMatch == true
StackOverflow에는 이런 질문이 있다.
why-does-stream-allmatch-return-true-for-an-empty-stream
- 질문
왜 빈스트림의 allMathch와 noneMatch는 true일까? - 답변
Vacuous Truth, 참과 거짓을 판별할 수 있는 문장 “명제”
“내 방에 있는 모든 책은 자바책이다.”의 명제가 참인지를 판별할 때 가정이 되야할 “내 방에 있는 모든 책”이 한권도 없다면?
“자바책이다”를 판별하는 것 자체가 무의미하다.
=> 논리학에서 이처럼 가정이 거짓인 명제를 참으로 간주한다.
“p이면 q이다” 라는 명제에서, p가 거짓이면 q가 참이든 거짓이든 상관없이 전체 명제는 참이되며
이를 “Vacuous Truth”라고 한다.
즉 빈스트림에 대해 false 처리를 해야한다면 allMatch 혹은 noneMatch 검사 전에 empty 체크를 해줘야한다,
Async vs Non-Blocking
- 비동기 vs 논블록킹
- 비동기: 메서드(기능)을 제공하는 입장에서의 개념
- 논블록킹: 메서드(기능)을 사용하는 클라이언트 입장에서의 개념
메서드를 제공해주는 공급자입장에서 결과를 어떻게줄지?
- 비동기: 메서드(기능)을 제공하는 입장에서의 개념
- 참고사항, 병렬프로그래밍 키워드
- Sync
호출하는 메서드는 결과가 완성될때까지 반환하지 않는다. - Async
결과값이 결정되기 전에 먼저 임시로 반환 ( 메서드는 결과 처리중 )
- Blocking
클라이언트가 Async한 메서드를 이용하여 조회를 요청했다면, 결과가 완성되었을때쯤, 다시 메서드를 조회해야한다.
조회를 하는동안 다른작업을 안하고 결과가 완성될때까지 진행하는 것 - Non-Blocking
결과가 완성될때까지 기다리지않고, 다른 작업을 수행하다가 Callback 함수를 이용하여 나머지 작업을 수행하는 것
- Sync