나는의 빠른 검사 있었다 구아바 API 하고 제공하는 새로운 콜렉션 유형 ( Multimap
및 BiMap
예를 들어 유용 표시) 나는이 프로젝트에 (들) I 작업에 라이브러리를 포함 생각입니다.
그러나 도서관에 큰 도움이되지 않고 기능을 배우는 것이 귀중한 시간을 낭비한다면 도서관을 포함시키는 것에 대한 언급도 있습니다.
프로젝트에 Guava 라이브러리를 포함 시켰으며 예상치 못한 방식으로 유용하다고 입증 되었습니까? 앞으로도 항상 사용 하시겠습니까? 주요 이점 / 시간 절약은 무엇입니까? 숨겨진 기능은 무엇입니까?
답변
정말로 구아바의 모든 것이 유용합니다. 나는 그것을 오랫동안 사용 해 왔으며 여전히 손으로하는 것보다 적은 코드를 사용하여 할 수있는 새로운 것을 항상 발견하고 있습니다.
다른 사람들이 내가 실제로 사랑한다고 언급하지 않은 것들 :
Multimap
s는 훌륭합니다. 와 같은 것을Map<Foo, Collection<Bar>>
사용할 때마다 멀티 맵을 대신 사용하여 키에 매핑 된 기존 컬렉션을 확인하고 지루하지 않은 경우 생성 및 추가하는 지루한 작업을 직접 저장하십시오.Ordering
Comparator
원하는 방식으로 동작하는 을 구축 하는 데 좋습니다.Maps.uniqueIndex
andMultimaps.index
:이 메소드는 aIterable
및 a 를 작성하고 또는 에 함수를 적용한 결과 값을 인덱싱하는Function
빌드 를 수행합니다. 따라서 항목의 ID를 검색하는 함수를 사용하면 한 줄에 ID별로 항목 목록을 색인 할 수 있습니다.ImmutableMap
ImmutableListMultimap
Iterable
- 이 … 제공하는 기능 재료
filter
,transform
대한 클래스 사용의 상세에도 불구하고, 등Function
의과Predicate
들,이 유용한 것으로 나타났습니다. 나는 잘이 읽기 수 있도록 하나의 방법의 예를 제공 여기 . ComparisonChain
작고 쉽게 간과되는 클래스는 여러 값을 연속적으로 비교하는 비교 방법을 작성하고 첫 번째 차이가 발견되면 반환해야 할 때 유용합니다. 그것은 그것의 모든 지루함을 제거하여 단지 몇 줄의 체인 메소드 호출을 만듭니다.Objects.equal(Object,Object)
-null 안전과 같습니다.Objects.hashCode(Object...)
-클래스의 여러 필드를 기반으로 해시 코드를 얻는 쉬운 방법.Objects.firstNonNull(Object,Object)
-첫 번째 값이 null 인 경우, 특히 첫 번째 값이 메서드 호출의 결과 인 경우 기본값을 가져 오는 코드가 줄어 듭니다 (일반적인 방법으로 수행하기 전에 변수에 값을 할당해야 함).CharMatcher
이미 언급되었지만 매우 강력합니다.Throwables
던질 수있는 물건을 던질 수 있습니다. 예를 들어 던질 수있는 물건을Throwables.propagate
aRuntimeException
또는 an 인 경우 다시 던지고Error
그것을 감싸고RuntimeException
그렇지 않으면 던질 수 있습니다.
확실히 갈 수는 있지만 일을해야합니다. =) 어쨌든, 내가 좋아하는 것을 나열했지만 사실 구아바의 모든 것이 어떤 상황에서나 유용하다는 것입니다. 그것의 대부분은 매우 자주 유용합니다. 사용하면 더 많은 용도를 발견 할 수 있습니다. 그것을 사용하지 않으면 한 손이 등 뒤로 묶여있는 것처럼 느껴집니다.
답변
Google에서 2 년 동안 Guava를 효과적으로 사용하고 있습니다. 정말 훌륭합니다.
내가 특히 좋아하는 부분은 다음과 같습니다.
Charsets.*
-너무 간단하고 유용합니다- 컬렉션
- IO 처리 (한 줄로 리소스를 완전히 읽음 등)
Splitter
/Joiner
Preconditions
답변
처음에는 컬렉션 속 기용으로 사용했습니다. 예를 들어,
Map<String, Map<Long, List<String>>> map = new HashMap<String, Map<Long, List<String>>>();
당신은 이것을 할 수 있습니다 :
Map<String, Map<Long, List<String>>> map = Maps.newHashMap();
지도를 채우는 것도 쉽습니다.
ImmutableMap<String,String> map = ImmutableMap.of("key1", "value1", "key2", "value2");
이제 구아바에있는 다른 유용한 유틸리티를 발견했습니다. 예를 들어 CharMatcher 클래스를 사용하면 일련의 문자를 일치시킬 수 있습니다. 넌 할 수있어:
CharMatcher.inRange('a','z').or(inRange('A','Z'));
또는
String phoneNumber = CharMatcher.DIGIT.retainFrom("my phone number is 123456789");
답변
CharMatcher의 precomputed () 메소드 ( source ) 는 다른 날에 우연히 발견 된 멋진 “숨겨진 기능”입니다.
실제로는 비트 배열을 사용하여 조회 테이블을 만든 다음 문자가 “일치”하는지 확인하는 최적화입니다.
라이브러리를 사용할 때 활용할 수있는 숨겨진 최적화의 일종으로, 자신의 코드에서 자신을 생각하지 않았을 수도 있습니다.
물론 여러 번 사용할 복잡한 CharMatcher를 만드는 경우 다음과 같이 precomputed () 메서드를 호출해야합니다.
CharMatcher complexMatcher = CharMatcher.anyOf("cat")
.or(CharMatcher.DIGIT)
.or(CharMatcher.WHITESPACE)
.precomputed();
답변
여기의 YouTube 동영상 구글 (스피커 : 케빈 Bourrillion, 구글의 핵심 자바 라이브러리 리드 엔지니어) 구글 컬렉션의 아름다움을 보여줍니다. Google이 훌륭하다고 생각하는 한 가지는 컬렉션의 불변성을 보장 하는 것입니다.
답변
Google Guava는 유틸리티 라이브러리이므로 내부에 킬러 클래스가 있는지 의심됩니다. 유틸리티에 관한 모든 것들은 거의 모든 프로젝트에서 사용한다는 것입니다. Java 컬렉션을 사용하지 않는 프로젝트를 기억할 수 없습니다. 사실, 구글 구아바의 수집 유틸리티는 훌륭하고 Java SDK 자체에 있어야합니다.
Google Guava의 수업에 관한 세 가지 기사를 작성했습니다.
- 사용
CheckedFuture
: http://blog.firdau.si/2010/07/07/guava-using-checkedfuture/ - 사용
ListenableFuture
: http://blog.firdau.si/2010/07/05/guava-using-listenablefuture/ ComputingMap
Google 컬렉션 (현재 구아바) http://blog.firdau.si/2009/11/13/computing-map-on-google-collections/
그리고 이것이 전부가 아닙니다. 구아바로 할 수있는 다른 많은 것들이 있습니다.
답변
절대적으로 매우 유용합니다. 거의 항상 새 프로젝트에 추가 된 첫 번째 라이브러리입니다.
- 우리는 Iterators / Iterables와 Function 인터페이스를 매우 좋아합니다.
- 인터페이스의 서비스 제품군은 훌륭한 추상화입니다
- API 유형의 ImmutableXXX 클래스를 사용하여 변경할 수 없음을 알리기 시작했습니다.
- 특정 상황에서는 맵 맵 (MapMaker의)이 훌륭합니다.
전반적으로, 라이브러리는 매우 높은 품질입니다. API는 잘 구현되어 있습니다. 추천.