본문 바로가기
Language/Java

[Java] 스트림 요소를 하나의 문자열로 결합 / Collectors.joining()

by 키튼햄 2023. 11. 6.

공부를 하다가 누가 Collectors.joining()을 사용하는 것을 보고 무엇인지 궁금해졌다.

오늘은 Collectors.joining()에 대해 정리해 보고자 한다.


 

 

Collectors.joining()은 Java의 스트림(Stream)을 사용하여 문자열을 결합하는 Collectors 유틸리티 메서드 중 하나이다. 

이 메서드는 스트림 요소를 하나의 문자열로 결합할 때 사용한다.

예를 들면, 스트림에 있는 문자열 요소를 모두 연결하거나, 구분 문자열을 포함한 하나의 문자열로 결합할 수 있다.

 

사용시에는

import java.util.stream.Collectors;

import java.util.stream.Stream;

두가지를 import 해야한다.

아니면 [ import java.util.*; ]로 하나만 import 해주어도 된다.

 

 

 

1. Collectors.joining() 

Collectors.joining() 메서드는 Collector 입력요소를 단일 문자열로 연결한다.

 

1) 아래는 원시 문자 배열을 문자열로 변환하는 예제이다.

import java.util.*;

class Main{
    public static void main(String[] args){
        char[] charArray = { 'J', 'a', 'v', 'a' };
 
        String string = Stream.of(charArray)                // Stream<char[]>
                            .map(arr -> new String(arr))    // Stream<String>
                            .collect(Collectors.joining());
 
        System.out.println(string);        
    }
}


//출력
//Java

 

 

2) 아래는 목록을 문자열로 변환하는 예제이다.

import java.util.*;

class Main{
    public static void main(String[] args){
        // `Character` 목록을 문자열로 변환
        List<Character> chars = Arrays.asList('J', 'a', 'v', 'a');
 
        String string = chars.stream()              // Stream<Character>
                            .map(String::valueOf)   // Stream<String>
                            .collect(Collectors.joining());
 
        System.out.println(string);        
    }
}


//출력
//Java

 

혹은 아래와 같이 쓸 수도 있다.

import java.util.*;

class Main{
    public static void main(String[] args){
        // `Character` 목록을 문자열로 변환
        List<Character> chars = Arrays.asList('J', 'a', 'v', 'a');
 
        StringBuilder sb = new StringBuilder();
        for (Character character : chars) {
            sb.append(character);
        }
        String string = sb.toString();
 
        System.out.println(string);        
    }
}


//출력
//Java

 

 

 

2. Collectors.joining(delimiter)

구분 문자열을 포함하여 문자열을 하나로 연결할 수도 있다.

이때는 delimiter로 구분 문자열을 추가하여 작성하면 된다.

 

예제1)

import java.util.*;
 
class Main{
    public static void main(String[] args){
    
        List<String> colors = Arrays.asList("RED", "BLUE", "BLACK", "GREEN");
 
        // 요소를 문자열로 변환하고 쉼표로 구분하여 연결
        String joined = colors.stream().collect(Collectors.joining(", "));
 
        System.out.println(joined);
    }
}


//출력
//RED, BLUE, BLACK, GREEN

 

예제2)

import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Main{
    public static void main(String[] args) {
        Stream<String> strings = Stream.of("Hello", "World", "Java");
        
        // Collectors.joining()을 사용하여 스트림의 요소를 결합
        String result = strings.collect(Collectors.joining(", "));
        
        System.out.println(result); // "Hello, World, Java"
    }
}


//출력
//"Hello, World, Java"

 

 

3. Collectors.joining(delimiter, prefix, suffix)

구분 문자열로 구분된 입력요소를 지정된 접두사와 접미사로 연결할 수도 있다.

delimiter : 구분 문자열 입력

prefix : 접두사 입력

suffix : 접미사 입력

import java.util.*;
 
class Main{
    public static void main(String[] args){
    
        List<String> colors = Arrays.asList("RED", "BLUE", "BLACK", "GREEN");
 
        String joined = colors.stream().collect(Collectors.joining(", ", "{", "}"));
 
        System.out.println(joined);
    }
}


//출력
//{RED, BLUE, BLACK, GREEN}

 

다음과 같이 쓸 수도 있다.

import java.util.*;
 
class Main{
    public static void main(String[] args){
    
        List<String> colors = Arrays.asList("RED", "BLUE", "BLACK", "GREEN");
 
        StringJoiner joiner = new StringJoiner(", ", "{", "}");
        for (String color : colors) {
            joiner.add(color);
        }
        String joined = joiner.toString();
 
        System.out.println(joined);
    }
}


//출력
//{RED, BLUE, BLACK, GREEN}

 

 

 

 

 


참고