IT

구아바 라이브러리 : 가장 유용하고 숨겨진 기능은 무엇입니까?

lottoking 2020. 7. 1. 07:40
반응형

구아바 라이브러리 : 가장 유용하고 숨겨진 기능은 무엇입니까? [닫은]


나는의 빠른 검사 있었다 구아바 API 하고 제공하는 새로운 콜렉션 유형 ( MultimapBiMap예를 들어 유용 표시) 나는이 프로젝트에 (들) I 작업에 라이브러리를 포함 생각입니다.

그러나 도서관에 큰 도움이되지 않고 기능을 배우는 것이 귀중한 시간을 낭비한다면 도서관을 포함시키는 것에 대한 언급도 있습니다.

프로젝트에 Guava 라이브러리를 포함 시켰으며 예상치 못한 방식으로 유용하다고 입증 되었습니까? 앞으로도 항상 사용 하시겠습니까? 주요 이점 / 시간 절약은 무엇입니까? 숨겨진 기능은 무엇입니까?


정말로 구아바의 모든 것이 유용합니다. 나는 그것을 오랫동안 사용 해 왔으며 여전히 손으로하는 것보다 적은 코드를 사용하여 할 수있는 새로운 것을 항상 발견하고 있습니다.

다른 사람들이 실제로 내가 사랑한다고 언급하지 않은 것들 :

  • Multimaps는 훌륭합니다. 와 같은 것을 사용할 때는 언제든지 Map<Foo, Collection<Bar>>멀티 맵을 사용하여 키에 매핑 된 기존 컬렉션을 확인하고 지루하지 않은 경우이를 추가하고 추가하십시오.
  • OrderingComparator원하는 방식으로 동작하는 을 구축 하는 데 좋습니다.
  • Maps.uniqueIndexand Multimaps.index:이 메소드는 a Iterable및 a 를 작성하고 또는 에 함수를 적용한 결과 값을 인덱싱하는 Function빌드 를 수행합니다. 따라서 항목의 ID를 검색하는 함수를 사용하면 한 줄에 ID별로 항목 목록을 색인 할 수 있습니다.ImmutableMapImmutableListMultimapIterable
  • 그것이 제공하는 기능적인 것들 ... filter, transform등. Functions와 Predicates에 클래스를 사용하는 자세한 표현에도 불구하고, 이것이 유용하다는 것을 알았습니다. 나는 잘이 읽기 수 있도록 하나의 방법의 예를 제공 여기 .
  • ComparisonChain작고 쉽게 간과되는 클래스는 여러 값을 연속적으로 비교하는 비교 방법을 작성하고 첫 번째 차이가 발견되면 반환해야 할 때 유용합니다. 그것은 그것의 모든 지루함을 제거하여 단지 몇 줄의 체인 메소드 호출을 만듭니다.
  • Objects.equal(Object,Object) -null 안전과 같습니다.
  • Objects.hashCode(Object...) -클래스의 여러 필드를 기반으로 해시 코드를 얻는 쉬운 방법.
  • Objects.firstNonNull(Object,Object) -첫 번째 값이 null 인 경우, 특히 첫 번째 값이 메서드 호출의 결과 인 경우 기본값을 가져 오는 코드가 줄어 듭니다 (일반적인 방법으로 수행하기 전에 변수에 값을 할당해야 함).
  • CharMatcher이미 언급되었지만 매우 강력합니다.
  • Throwables던질 수있는 물건을 던질 수 있습니다. 예를 들어 던질 수있는 물건을 Throwables.propagatea RuntimeException또는 an 인 경우 다시 던지고 Error그것을 감싸고 RuntimeException그렇지 않은 경우 던질 수 있습니다.

확실히 갈 수는 있지만 일을해야합니다. =) 어쨌든, 내가 좋아하는 것을 나열했지만 사실 구아바의 모든 것이 어떤 상황에서나 유용하다는 것입니다. 그것의 대부분은 매우 자주 유용합니다. 사용하면 더 많은 용도를 발견 할 수 있습니다. 그것을 사용하지 않으면 한 손이 등 뒤로 묶여있는 것처럼 느껴집니다.


Google 내에서 몇 년 동안 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();

Here's a YouTube video from Google (speaker: Kevin Bourrillion, lead engineer for Google's core Java libraries) which shows the beauty of Google Collections. One thing Google did, which I believe is brilliant, is guarantee Immutability in collections.


Google Guava is a utility library, so I doubt that there is a killer class inside it. The whole things about utility is you almost use that in every projects you have. I can't remember any project I've done that doesn't use Java collection. And truth is, the collection utility of Google Guava is wonderful and should be in the Java SDK itself.

I've written three articles about classes on Google Guava:

And this is not all, there are many other things you can do with Guava.


Absolutely very super useful. It's almost invariably the first library added to a new project.

  1. We're very fond of Iterators/Iterables and the Function interface.
  2. The Service family of interfaces are great abstractions
  3. We're so committed we've started to use the ImmutableXXX classes our API types to communicate that it can't be changed.
  4. Computing maps (from MapMaker) are wonderful in certain situations.

Overall, the library is very high quality. The API is well thought out, the implementation solid. Highly recommended.


MapMaker now offers bounded LRU caches - that's some substantial machinery hidden behind a tiny API. This has the potential for huge utility, and I'm still all over the code.

참고URL : https://stackoverflow.com/questions/3759440/the-guava-library-what-are-its-most-useful-and-or-hidden-features

반응형