[java] Google Guava isNullOrEmpty for collections

Guava에 문자열에 대한 isNullOrEmpty 유틸리티 메서드가 있음을 알았습니다.

Strings.isNullOrEmpty(str)

목록과 비슷한 것이 있습니까? 같은 것

Lists.isNullOrEmpty(list)

다음과 같아야합니다.

list == null || list.isEmpty()

또한 Arrays와 비슷한 것이 있습니까? 같은 것

Arrays.isNullOrEmpty(arr)

다음과 같아야합니다.

arr == null || arr.length == 0



답변

아니요,이 방법은 구아바에 존재하지 않으며 실제로 “아이디어 묘지”에 있습니다.

“is null or empty”는 컬렉션에 대해 정말로 묻고 싶은 질문이라고 생각하지 않습니다.

컬렉션이 null 일 수 있고 null이 비어있는 것과 동일하게 처리되어야하는 경우 다음과 같이 모든 모호함을 제거합니다.

Set<Foo> foos = NaughtyClass.getFoos();
if (foos == null) {
  foos = ImmutableSet.of();
}

또는 다음과 같이 (원하는 경우) :

Set<Foo> foos = MoreObjects.firstNonNull(
    NaughtyClass.getFoos(), ImmutableSet.<Foo>of());

그 후에는 .isEmpty()평소처럼 사용하시면 됩니다. 장난 꾸러기 API를 호출하자마자이 작업을 즉시 수행하면 무기한으로 계속되는 대신 이상한 점이 발생합니다.

그리고 “빈 컬렉션을 의미하는 null”이 반환되지 않고 전달되는 경우 작업은 간단합니다. 그냥 NullPointerException던지 도록 내버려두고 호출자를 구성합니다.


답변

구아바 전역에서 발견되는 경향 중 하나는 nulls 에 대해 매우 적대적인 경향이 있다는 것 입니다. 저자 null는 당신이 아마 당신이 사용하는 만큼 많이 사용하지 못하도록하고 싶어하며 , 사용하기 쉽게 해주는 유틸리티 방법을 제공하는 null것은이 목적에 역효과를 줄 것입니다.

Guava의 패러다임을 사용하려면이 컬렉션 (또는 배열)의 소스가 선택적으로를 반환해야하는지 고려하십시오 null. 그렇지 않은 경우 표시하고 @NonNull대신 빈 컬렉션을 반환하십시오 null. 또는 null값 이없는 목록을 예상하는 함수에 대한 매개 변수로를 사용 Preconditions.checkNotNull하는 null것이 좋습니다.이 경우 가 (예기치 않게) 전달 되면 예외가 발생합니다 .

null정말로 합법적 이라면 그렇게 list == null || list.isEmpty()어렵지 않습니다.


답변

commons-collections 에는 CollectionUtils.isEmpty () 가 있습니다.


답변

Spring Framework에는 CollectionUtils. 찾고있는 방법은 다음과 같습니다 org.springframework.util.CollectionUtils.isEmpty.. null 및 빈 컬렉션에 대해 true를 반환합니다.

그리고 배열의 경우 org.springframework.util.ObjectUtils.isEmpty거의 동일하게 작동하는 방법이 있습니다.


답변

Apache CollectionUtils 4에는 방법이 있습니다. 컬렉션이 null 인 경우 빈 목록을 반환하는 CollectionUtils.emptyIfNull () 가 있습니다. 이것은 foreach 루프에서 매우 유용하므로 반복하기 전에 null 검사를 수행 할 필요가 없습니다.


답변

내 솔루션은 : MoreObjects.firstNonNull (list, Collections. emptyList ())

JDK 컬렉션과 함께 Guava MoreObjects를 사용하고 있습니다.

 @Test
public void listnull() {
List<String> list = null;

for (String str : MoreObjects.firstNonNull(list, Collections.<String> emptyList())) {
    System.out.println(str);
}

list = new ArrayList<String>();
list.add("http://stackoverflow.com/");

for (String str : MoreObjects.firstNonNull(list, Collections.<String> emptyList())) {
    System.out.println(str);
}
}


답변

Appache 컬렉션 살펴보기 CollectionUtils.isEmpty ()는 컬렉션이 null이거나 비어 있으면 true를 반환합니다.