구아바 – 컬렉션 결합 및 분할

1. 개요

이 튜토리얼에서는 Guava 라이브러리에서 JoinerSplitter 를 사용 하는 방법을 배웁니다 . 우리는 가진 문자열로 컬렉션을 변환 할 수 있습니다 소목 우리는으로 된 컬렉션에 문자열을 분할 것이다 분배기 .

2. Joiner를 사용하여 목록문자열 로 변환

Joiner를 사용하여 ListString 에 조인하는 간단한 예제부터 시작하겠습니다 . 다음 예에서는 쉼표 ","를 구분 기호로 사용하여 이름 목록 을 하나의 문자열 로 결합합니다 .

@Test public void whenConvertListToString_thenConverted() { List names = Lists.newArrayList("John", "Jane", "Adam", "Tom"); String result = Joiner.on(",").join(names); assertEquals(result, "John,Jane,Adam,Tom"); }

3. Joiner를 사용하여 문자열로 변환

다음 – Joiner 를 사용 하여 MapString 으로 변환하는 방법을 살펴 보겠습니다 . 다음 예에서는 withKeyValueSeparator () 를 사용 하여 키를 값과 결합합니다.

@Test public void whenConvertMapToString_thenConverted() { Map salary = Maps.newHashMap(); salary.put("John", 1000); salary.put("Jane", 1500); String result = Joiner.on(" , ").withKeyValueSeparator(" = ") .join(salary); assertThat(result, containsString("John = 1000")); assertThat(result, containsString("Jane = 1500")); }

4. 중첩 컬렉션 결합

이제-중첩 된 컬렉션을 String 에 결합하는 방법을 살펴 보겠습니다 . 다음 예제에서는 각 ListString 으로 변환 한 결과를 결합합니다 .

@Test public void whenJoinNestedCollections_thenJoined() { List
    
      nested = Lists.newArrayList( Lists.newArrayList("apple", "banana", "orange"), Lists.newArrayList("cat", "dog", "bird"), Lists.newArrayList("John", "Jane", "Adam")); String result = Joiner.on(";").join(Iterables.transform(nested, new Function
     
      () { @Override public String apply(List input) { return Joiner.on("-").join(input); } })); assertThat(result, containsString("apple-banana-orange")); assertThat(result, containsString("cat-dog-bird")); assertThat(result, containsString("apple-banana-orange")); }
     
    

5. 결합자를 사용하는 동안 Null 값 처리

이제 조이너를 사용하는 동안 Null 값을 처리하는 다양한 방법을 살펴 보겠습니다.

컬렉션을 결합하는 동안 null 값건너 뛰 려면 다음 예제와 같이 skipNulls () 를 사용합니다 .

@Test public void whenConvertListToStringAndSkipNull_thenConverted() { List names = Lists.newArrayList("John", null, "Jane", "Adam", "Tom"); String result = Joiner.on(",").skipNulls().join(names); assertEquals(result, "John,Jane,Adam,Tom"); }

null 값을 건너 뛰지 않고 대신 바꾸 려면 다음 예제와 같이 useForNull () 을 사용합니다 .

@Test public void whenUseForNull_thenUsed() { List names = Lists.newArrayList("John", null, "Jane", "Adam", "Tom"); String result = Joiner.on(",").useForNull("nameless").join(names); assertEquals(result, "John,nameless,Jane,Adam,Tom"); }

참고 useForNull ()가 원래 목록을 변경하지 않습니다, 그것은 단지 조인의 출력에 영향을 미친다.

6. Splitter를 사용하여 문자열 에서 목록 만들기

이제 StringList 로 분할하는 방법을 살펴 보겠습니다 . 다음 예에서는 "-"구분 기호를 사용하여 입력 문자열List 로 분할합니다 .

@Test public void whenCreateListFromString_thenCreated() { String input = "apple - banana - orange"; List result = Splitter.on("-").trimResults() .splitToList(input); assertThat(result, contains("apple", "banana", "orange")); }

참고 trimResults () 결과 문자열의 맨 앞과 맨 뒤의 공백을 제거합니다.

7. Splitter를 사용하여 문자열 에서 만들기

다음 – Splitter를 사용하여 문자열에서 맵을 만드는 방법을 살펴 보겠습니다. 다음 예제에서는 withKeyValueSeparator () 를 사용 하여 StringMap 으로 분할합니다 .

@Test public void whenCreateMapFromString_thenCreated() { String input = "John=first,Adam=second"; Map result = Splitter.on(",") .withKeyValueSeparator("=") .split(input); assertEquals("first", result.get("John")); assertEquals("second", result.get("Adam")); }

8. 여러 구분자로 문자열 분할

이제- 여러 구분 기호 로 문자열 을 분할하는 방법을 살펴 보겠습니다 . 다음 예에서는 "."를 모두 사용합니다. 및 "," 문자열 을 분할합니다 .

@Test public void whenSplitStringOnMultipleSeparator_thenSplit() { String input = "apple.banana,,orange,,."; List result = Splitter.onPattern("[.,]") .omitEmptyStrings() .splitToList(input); assertThat(result, contains("apple", "banana", "orange")); }

그 주 () omitEmptyStrings 빈 문자열을 무시하고 결과에 추가되지 않습니다 목록 .

9. 특정 길이 로 문자열 분할

다음 – 특정 길이 로 문자열 을 분할하는 방법을 살펴 보겠습니다 . 다음 예에서는 문자열을 3 자마다 분할 합니다.

@Test public void whenSplitStringOnSpecificLength_thenSplit() { String input = "Hello world"; List result = Splitter.fixedLength(3).splitToList(input); assertThat(result, contains("Hel", "lo ", "wor", "ld")); }

10. 분할 결과 제한

마지막으로 분할 결과를 제한하는 방법을 살펴 보겠습니다. 당신이 원하는 경우 분배기 하는 항목의 특정 번호 후 분할 중지 - 사용 제한 () 다음 예제와 같이를 :

@Test public void whenLimitSplitting_thenLimited() { String input = "a,b,c,d,e"; List result = Splitter.on(",") .limit(4) .splitToList(input); assertEquals(4, result.size()); assertThat(result, contains("a", "b", "c", "d,e")); }

11. 결론

이 튜토리얼에서는 Guava에서 JoinerSplitter 를 모두 사용하여 컬렉션과 문자열 간의 다양한 변환을 수행하는 방법을 설명 했습니다.

이 모든 예제와 코드 스 니펫의 구현은 내 Guava github 프로젝트에서 찾을 수 있습니다. 이것은 Eclipse 기반 프로젝트이므로 그대로 가져 와서 실행하기 쉽습니다.