Guava 라이브러리:가장 유용한 기능 및/또는 숨겨진 기능은 무엇입니까?
Guava API와 새로운 컬렉션 타입에 대한 빠른 스캔을 했습니다.Multimap
★★★★★★★★★★★★★★★★★」BiMap
을 참조해 주세요.그리고 제가 작업하고 있는 프로젝트에 라이브러리를 포함시킬까 생각하고 있습니다.
그러나, 나는 도서관이 큰 도움이 되지 않고, 그 특징들을 배우는 것이 귀중한 시간을 낭비하는 것이라면, 도서관을 무조건 포함시키는 것도 묵묵부답이다.
당신의 프로젝트에 Guava 라이브러리를 포함시켰으며, 예상치 못한 방식으로 유용함을 증명한 적이 있습니까?당신은 앞으로도 그것을 항상 사용할 건가요?주요 이점/시간 절약은 무엇입니까?그 숨겨진 특징은 무엇입니까?
정말이지, 구아바에 있는 모든 것이 유용해.꽤 오랫동안 사용해 왔지만, 여전히 손으로 하는 것보다 코드가 덜 걸리는 새로운 것을 발견합니다.
다른 사람들이 내가 좋아하는 것에 대해 별로 언급하지 않은 것들이 있다.
Multimap
는 훌륭합니다.든지 이런 을 사용할 수 .Map<Foo, Collection<Bar>>
대신 멀티맵을 사용하여 키에 매핑된 기존 컬렉션을 체크하고 존재하지 않는 경우 생성하고 추가하는 번거로움을 덜 수 있습니다.Ordering
에 최적Comparator
을 사용법Maps.uniqueIndex
★★★★★★★★★★★★★★★★★」Multimaps.index
는 ""를 사용합니다.Iterable
a. a. a.Function
를 구축합니다.ImmutableMap
★★★★★★★★★★★★★★★★★」ImmutableListMultimap
로 표시합니다.Iterable
각 기능에 대한 적용 결과에 따라 달라집니다.따라서 항목의 ID를 검색하는 기능으로 항목의 ID를 기준으로 한 줄에 항목 목록을 인덱싱할 수 있습니다.- ...
filter
,transform
의할 수 ,Function
§Predicate
s, 이게 도움이 될 것 같아요.여기 이 글을 잘 읽을 수 있는 한 가지 예를 제시하겠습니다. ComparisonChain
는 간과하기 쉬운 작은 클래스입니다.여러 값을 연속적으로 비교하는 비교 메서드를 작성할 때 편리하며 첫 번째 차이가 발견되면 반환해야 합니다.이것에 의해, 그 지루함이 모두 없어져, 체인으로 연결된 메서드 콜의 몇 회선만이 됩니다.Objects.equal(Object,Object)
(특수 세이프가 동일).Objects.hashCode(Object...)
를 쉽게 수 방법. - 클래스 내 여러 필드를 기반으로 해시 코드를 얻을 수 있습니다.Objects.firstNonNull(Object,Object)
- 첫 번째 값이 null인 경우, 특히 첫 번째 값이 메서드 호출의 결과인 경우 기본값을 얻기 위한 코드를 줄입니다(일반적인 방법으로 수행하기 전에 변수에 할당해야 합니다).CharMatcher
는 이미 언급되었지만 매우 강력합니다.Throwables
수 있는 것, 던질 수 있는 것, 던질 수 있는 것, 던질 수 있는 것, 던질 수 있는 것, 수 있는 것, 던질 수 것.Throwables.propagate
수 있는 다시 던질 수 .RuntimeException
★★★Error
을 「」로 .RuntimeException
하다
계속 할 수는 있지만, 일하러 가야 해요.=)어쨌든, 마음에 드는 것이 몇개인가 기재되어 있습니다만, 실제로 구아바의 모든 것은 상황에 따라서는 도움이 됩니다.그것의 대부분은 매우 자주 유용하다.사용하면서 더 많은 용도를 발견하게 될 것입니다.사용하지 않는 것은 한 손을 등 뒤로 묶는 느낌입니다.
저는 구글에서 몇 년 동안 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의 precalculated() 메서드(소스)는 일전에 우연히 발견한 훌륭한 '숨겨진 기능'입니다.
실제로는 (비트 어레이를 사용하여) 룩업 테이블을 만들고 단순히 문자를 검색하여 "일치" 여부를 확인하는 최적화일 뿐입니다.
이것은 라이브러리를 사용할 때 활용할 수 있는 숨겨진 최적화입니다. 자신의 코드로 자신을 생각하지 못했을 수도 있습니다.
물론 여러 번 사용할 예정인 복잡한 CharMatcher를 작성하는 경우 다음과 같은 precalculated() 메서드를 호출해야 합니다.
CharMatcher complexMatcher = CharMatcher.anyOf("cat")
.or(CharMatcher.DIGIT)
.or(CharMatcher.WHITESPACE)
.precomputed();
구글의 유튜브 비디오(발언자: 케빈 부릴리온, 구글의 핵심 자바 라이브러리 담당 엔지니어)는 구글 컬렉션의 아름다움을 보여준다.구글이 한 일은 훌륭하다고 생각합니다.컬렉션의 불변성을 보증하는 것입니다.
Google Guava는 유틸리티 라이브러리이기 때문에 킬러 클래스가 있는지 의심됩니다.유틸리티의 중요한 점은 거의 모든 프로젝트에서 그것을 사용한다는 것입니다.자바 컬렉션을 사용하지 않은 프로젝트는 기억나지 않습니다.Google Guava의 컬렉션 유틸리티는 훌륭하며 Java SDK 자체에 포함되어 있어야 합니다.
Google Guava에 관한 수업에 대해 3개의 기사를 썼습니다.
- 사용.
CheckedFuture
: http://blog.firdau.si/2010/07/07/guava-using-checkedfuture/ - 사용.
ListenableFuture
: http://blog.firdau.si/2010/07/05/guava-using-listenablefuture/ ComputingMap
Google 컬렉션(현재의 Guava) http://blog.firdau.si/2009/11/13/computing-map-on-google-collections/에서 확인할 수 있습니다.
그리고 이것이 전부가 아닙니다. Guava로 할 수 있는 다른 많은 것들이 있습니다.
아주 유용하게 쓰입니다거의 변함없이 새 프로젝트에 추가된 첫 번째 라이브러리입니다.
- 우리는 반복기/반복기 및 기능 인터페이스를 매우 좋아합니다.
- 서비스 인터페이스 패밀리는 매우 추상적인 개념입니다.
- 우리는 API 타입의 Unmutable XXX 클래스를 사용하여 변경할 수 없도록 통신하기 시작했습니다.
- (MapMaker의) 컴퓨팅 맵은 상황에 따라서는 훌륭합니다.
전반적으로 도서관은 매우 질이 좋다.API는 잘 고안되어 있고, 구현은 견고합니다.강력히 추천합니다.
MapMaker는 이제 제한된 LRU 캐시를 제공합니다. 이 캐시는 작은 API 뒤에 숨겨져 있는 몇 가지 큰 기계입니다.이건 엄청난 효용성이 있고, 난 아직도 그 코드들을 잘 알고 있어.
언급URL : https://stackoverflow.com/questions/3759440/the-guava-library-what-are-its-most-useful-and-or-hidden-features
'source' 카테고리의 다른 글
SQL(MySQL) vs NoSQL(CouchDB) (0) | 2022.10.23 |
---|---|
배열을 함수 인수 목록으로 변환 (0) | 2022.10.23 |
코드 및 마크업 Q&A 이미지 예시 (0) | 2022.10.23 |
Mac php 장인 마이그레이션 오류에서 Larabel 설정:해당 파일 또는 디렉터리가 없습니다. (0) | 2022.10.23 |
VSCode -- Python 프로그램을 디버깅하기 위한 작업 디렉토리를 설정하는 방법 (0) | 2022.10.23 |