>  기사  >  Java  >  Java Guava 사용에 대한 팁은 무엇입니까?

Java Guava 사용에 대한 팁은 무엇입니까?

WBOY
WBOY앞으로
2023-04-14 22:37:041390검색

Guava 소개

Guava는 Google에서 출시한 오픈 소스 라이브러리로 주로 문자열 처리, 집합 연산, 함수형 프로그래밍, 캐싱 등과 같은 Java 개발에 매우 ​​유용한 도구 클래스와 API를 제공합니다.

Strings

Strings는 문자열을 처리하는 데 유용한 여러 가지 방법을 제공하는 Guava에서 제공하는 문자열 도구 세트입니다. 다음은 문자열의 주요 메서드입니다.

  • isNullOrEmpty(String string): 문자열이 비어 있는지 또는 null인지 확인합니다. isNullOrEmpty(String string):判断字符串是否为空或null。

  • padEnd(String string, int minLength, char padChar):在字符串末尾填充指定字符,直到字符串达到指定长度。

  • padStart(String string, int minLength, char padChar):在字符串开头填充指定字符,直到字符串达到指定长度。

  • repeat(String string, int count):重复指定字符串指定次数。

  • commonPrefix(CharSequence a, CharSequence b):获取两个字符串的最长公共前缀。

  • commonSuffix(CharSequence a, CharSequence b):获取两个字符串的最长公共后缀。

以下是Strings的使用示例:

public class StringsDemo {
    public static void main(String[] args) {
        // 判断字符串是否为空或null
        String str1 = null;
        String str2 = "";
        System.out.println(Strings.isNullOrEmpty(str1));
        System.out.println(Strings.isNullOrEmpty(str2));

        // 在字符串末尾填充指定字符,直到字符串达到指定长度
        String str3 = "abc";
        String paddedStr1 = Strings.padEnd(str3, 6, '*');
        System.out.println(paddedStr1);

        // 在字符串开头填充指定字符,直到字符串达到指定长度
        String str4 = "abc";
        String paddedStr2 = Strings.padStart(str4, 6, '*');
        System.out.println(paddedStr2);

        // 重复指定字符串指定次数
        String str5 = "abc";
        String repeatedStr = Strings.repeat(str5, 3);
        System.out.println(repeatedStr);

        // 获取两个字符串的最长公共前缀
        String str6 = "abcdefg";
        String str7 = "abcdxyz";
        String commonPrefix = Strings.commonPrefix(str6, str7);
        System.out.println(commonPrefix);

        // 获取两个字符串的最长公共后缀
        String str8 = "abcdefg";
        String str9 = "xyzdefg";
    String commonSuffix = Strings.commonSuffix(str8, str9);
    System.out.println(commonSuffix);
}

集合操作(Collections)

Guava提供了一些非常有用的集合操作API,如下所示:

1.ImmutableList

不可变集合是Guava的一个重要特性,它可以确保集合不被修改,从而避免并发访问的问题。ImmutabelList是不可变List的实现,下面是一个示例代码:

List<String> list = Lists.newArrayList("a", "b", "c");
ImmutableList<String> immutableList = ImmutableList.copyOf(list);

2.Iterables

Iterables类提供了一些有用的方法来操作集合,如下所示:

Iterable<String> iterable = Lists.newArrayList("a", "b", "c");

// 判断集合是否为空
boolean isEmpty = Iterables.isEmpty(iterable);

// 获取第一个元素,如果集合为空返回null
String first = Iterables.getFirst(iterable, null);

// 获取最后一个元素,如果集合为空返回null
String last = Iterables.getLast(iterable, null);

// 获取所有符合条件的元素
Iterable<String> filtered = Iterables.filter(iterable, new Predicate<String>() {
    @Override
    public boolean apply(String input) {
        return input.startsWith("a");
    }
});

// 转换集合类型
List<String> newList = Lists.newArrayList(Iterables.transform(iterable, new Function<String, String>() {
    @Override
    public String apply(String input) {
        return input + input;
    }
}));

3.Multimaps

Multimaps提供了一个非常有用的数据结构,它允许一个键对应多个值,下面是一个示例代码:

ListMultimap<Integer, String> map = ArrayListMultimap.create();
map.put(1, "a");
map.put(1, "b");
map.put(2, "c");
List<String> values = map.get(1); // 返回[a, b]

4.Maps

Maps提供了一些有用的方法来操作Map,如下所示:

Map<Integer, String> map = ImmutableMap.of(1, "a", 2, "b", 3, "c");

// 判断Map是否为空
boolean isEmpty = Maps.isEmpty(map);

// 获取Map中的所有键
Set<Integer> keys = map.keySet();

// 获取Map中的所有值
Collection<String> values = map.values();

// 获取Map中的所有键值对
Set<Map.Entry<Integer, String>> entries = map.entrySet();

// 根据键获取值,如果不存在则返回null
String value = Maps.getIfPresent(map, 1);

条件检查(Preconditions)

Preconditions是Guava提供的一组前置条件检查工具,它提供了一些检查参数是否符合预期的方法。以下是Preconditions的主要方法:

  • checkArgument(boolean expression, String errorMessageTemplate, Object... errorMessageArgs):检查参数是否符合预期,并抛出IllegalArgumentException异常,可以包含错误信息模板和占位符。

  • checkNotNull(T reference, String errorMessageTemplate, Object... errorMessageArgs):检查参数是否为null,并抛出NullPointerException异常,可以包含错误信息模板和占位符。

  • checkState(boolean expression, String errorMessageTemplate, Object... errorMessageArgs):检查对象状态是否符合预期,并抛出IllegalStateException异常,可以包含错误信息模板和占位符。

  • checkElementIndex(int index, int size, String errorMessageTemplate, Object... errorMessageArgs):检查下标是否在集合的范围内,并抛出IndexOutOfBoundsException异常,可以包含错误信息模板和占位符。

  • checkPositionIndex(int index, int size, String errorMessageTemplate, Object... errorMessageArgs):检查下标是否在集合的范围内,可以等于集合的大小,并抛出IndexOutOfBoundsException异常,可以包含错误信息模板和占位符。

  • checkPositionIndexes(int start, int end, int size)

padEnd(String string, int minLength, char padChar): 문자열이 지정된 길이에 도달할 때까지 문자열 끝에 지정된 문자를 채웁니다.

padStart(String string, int minLength, char padChar): 문자열이 지정된 길이에 도달할 때까지 문자열 시작 부분에 지정된 문자를 채웁니다.

  • repeat(String string, int count): 지정된 문자열을 지정된 횟수만큼 반복합니다.

  • commonPrefix(CharSequence a, CharSequence b): 두 문자열의 가장 긴 공통 접두사를 가져옵니다.

  • commonSuffix(CharSequence a, CharSequence b): 두 문자열의 가장 긴 공통 접미사를 가져옵니다.

  • 다음은 문자열 사용 예입니다.

    public class PreconditionsDemo {
        public static void main(String[] args) {
            // 检查参数是否符合预期,并抛出IllegalArgumentException异常,可以包含错误信息模板和占位符
            String str1 = "abc";
            Preconditions.checkArgument(str1.length() < 3, "字符串长度必须小于3");
            // 检查参数是否为null,并抛出NullPointerException异常,可以包含错误信息模板和占位符
            String str2 = null;
            Preconditions.checkNotNull(str2, "字符串不能为空");
            // 检查对象状态是否符合预期,并抛出IllegalStateException异常,可以包含错误信息模板和占位符
            boolean flag1 = false;
            Preconditions.checkState(flag1, "状态不正确");
            // 检查下标是否在集合的范围内,并抛出IndexOutOfBoundsException异常,可以包含错误信息模板和占位符
            List<Integer> list1 = Lists.newArrayList(1, 2, 3, 4, 5);
            Preconditions.checkElementIndex(6, list1.size(), "下标越界");
            // 检查下标是否在集合的范围内,可以等于集合的大小,并抛出IndexOutOfBoundsException异常,可以包含错误信息模板和占位符
            List<Integer> list2 = Lists.newArrayList(1, 2, 3, 4, 5);
            Preconditions.checkPositionIndex(5, list2.size(), "下标越界");
            // 检查开始下标和结束下标是否在集合的范围内,并抛出IndexOutOfBoundsException异常
            List<Integer> list3 = Lists.newArrayList(1, 2, 3, 4, 5);
            Preconditions.checkPositionIndexes(2, 6, list3.size());
            // 可以在错误信息中使用占位符
            int value1 = 101;
            Preconditions.checkArgument(value1 <= 100, "值必须小于等于 %s", 100);
            // 可以使用Supplier来避免计算开销
            int value2 = 101;
            Preconditions.checkArgument(value2 <= 100, () -> "值必须小于等于 " + 100);
    }

    Collections(컬렉션)
  • Guava는 다음과 같이 몇 가지 매우 유용한 컬렉션 작업 API를 제공합니다.

    1 ImmutableList
  • Immutable 컬렉션은 Guava의 중요한 기능입니다. , 컬렉션이 수정되지 않도록 하여 동시 액세스 문제를 방지합니다. ImmutabelList는 불변 목록의 구현입니다. 다음은 샘플 코드입니다.

    public class CacheDemo {
        public static void main(String[] args) {
            Cache<String, String> cache = CacheBuilder.newBuilder()
                    .maximumSize(100)
                    .expireAfterWrite(10, TimeUnit.MINUTES)
                    .build();
    
            cache.put("key", "value");
    
            String value = cache.getIfPresent("key");
        }
    }

    2.Iterables
  • Iterables 클래스는 아래와 같이 컬렉션을 작동하는 몇 가지 유용한 메서드를 제공합니다.

    rrreee

    3.Multimaps
  • Multimaps는 A 매우 하나의 키가 여러 값에 대응되도록 하는 유용한 데이터 구조는 다음과 같습니다.

    rrreee

    4. Maps
  • Maps는 아래와 같이 지도를 작동하는 데 유용한 몇 가지 방법을 제공합니다.

    rrreee

    조건 검사(전제 조건)
  • 전제조건은 Guava에서 제공하는 전제조건 검사 도구 세트로, 매개변수가 기대치를 충족하는지 확인하는 몇 가지 방법을 제공합니다. 다음은 전제조건의 주요 메소드입니다:

checkArgument(boolean 표현식, 문자열 errorMessageTemplate, Object... errorMessageArgs): 매개변수가 기대치를 충족하는지 확인하고 다음을 포함할 수 있는 IllegalArgumentException 예외를 발생시킵니다. 오류 메시지 템플릿 및 자리 표시자. 🎜🎜🎜🎜checkNotNull(T reference, String errorMessageTemplate, Object... errorMessageArgs): 매개변수가 null인지 확인하고 오류 메시지 템플릿과 자리 표시자가 포함될 수 있는 NullPointerException을 발생시킵니다. 🎜🎜🎜🎜checkState(boolean 표현식, 문자열 errorMessageTemplate, Object... errorMessageArgs): 객체 상태가 예상대로인지 확인하고 오류 메시지 템플릿과 자리 표시자가 포함될 수 있는 IllegalStateException 예외를 발생시킵니다. 🎜🎜🎜🎜checkElementIndex(int ​​​​index, int size, String errorMessageTemplate, Object... errorMessageArgs): 아래 첨자가 컬렉션 범위 내에 있는지 확인하고 IndexOutOfBoundsException 예외를 발생시킵니다. 오류 메시지 템플릿과 자리 표시자가 포함될 수 있습니다. 🎜🎜🎜🎜checkPositionIndex(int ​​​​index, int size, String errorMessageTemplate, Object... errorMessageArgs): 아래 첨자가 컬렉션 범위 내에 있는지 확인합니다. 오류 메시지 템플릿과 자리 표시자가 포함될 수 있는 IndexOutOfBoundsException 예외가 발생합니다. 🎜🎜🎜🎜checkPositionIndexes(int start, int end, int size): 시작 첨자와 끝 첨자가 컬렉션 범위 내에 있는지 확인하고 IndexOutOfBoundsException 예외를 발생시킵니다. 🎜🎜🎜🎜다음은 전제 조건 사용 예입니다. 🎜rrreee🎜만료 시간을 사용하여 로컬 캐시(CacheBuilder)를 설정할 수 있습니다.🎜🎜Cache는 Guava에서 제공하는 캐싱 도구 클래스로, 메모리에 데이터를 캐시하고 성능 향상에 도움이 됩니다. 프로그램의 성능. Cache의 주요 메소드는 다음과 같습니다. 🎜🎜🎜🎜get(K key, Callabled1336e9e686742fb22c1860557381905 valueLoader): 지정된 키의 캐시 값을 가져옵니다. 캐시에 없으면 valueLoader를 호출하여 데이터를 로드합니다. 그리고 캐시에 저장하세요. 🎜🎜🎜🎜getIfPresent(Object key): 지정된 키의 캐시 값을 가져옵니다. 캐시 값이 없으면 null을 반환합니다. 🎜🎜🎜🎜getAllPresent(Iterable6b3d0130bba23ae47fe2b8e8cddf0195keys): 지정된 키의 캐시 값을 가져옵니다. 캐시 값이 없으면 null을 반환합니다. 🎜🎜🎜🎜put(K key, V value): 지정된 키의 캐시 값을 캐시에 저장합니다. 🎜🎜🎜🎜putAll(Map1f3cc7591e39d520fa6034162cf6bbdam): 지정된 Map의 캐시 값을 캐시에 저장합니다. 🎜🎜🎜🎜invalidate(Object key): 캐시에서 지정된 키의 캐시 값을 삭제합니다. 🎜🎜🎜🎜invalidateAll(Iterable6b3d0130bba23ae47fe2b8e8cddf0195 키): 캐시에서 지정된 키의 캐시 값을 삭제합니다. 🎜🎜🎜🎜invalidateAll(): 캐시에서 캐시된 모든 값을 제거합니다. 🎜🎜🎜🎜size(): 캐시에 캐시된 값의 개수를 가져옵니다. 🎜🎜🎜🎜asMap(): 캐시를 지도로 변환합니다. 🎜🎜🎜rreee

위 내용은 Java Guava 사용에 대한 팁은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제