백엔드

[java] for문 안에서 한번에 출력하기,이어붙이기 [StringBuilder, StringJoiner, String.join, stream API]

음그냥 2025. 3. 13. 04:30
반응형

객체 리스트를 for문 돌릴때 결과값을 한번에 담아서 리턴하는 방법 4가지

 

public class Student {

    private static int baseId = 1000;

    private String name;
    private int id;
    ArrayList<Subject> subjects = new ArrayList<>();

    public Student(String name) {
        this.name = name;
        this.id = ++baseId;
    }

    public String getName(){
        return name;
    }
    
    public String getSubjectName(){
    	아래 4가지 방법중 선택
    }
    
    public String showInfo(ArrayList<Subject> subjects){
        String info = id+" " + name +" student's subject :" + getSubjectName();
        return info;
    }
package org.example;

public class StudentTest {
    public static void main(String[] args) {
        Student lee = new Student("lee");
        Student kim = new Student("kim");

        lee.subjects.add(new Subject("국어",100));
        lee.subjects.add(new Subject("수학",50));

        kim.subjects.add(new Subject("국어",70));
        kim.subjects.add(new Subject("수학",85));
        kim.subjects.add(new Subject("영어",100));

        System.out.println(lee.showInfo(lee.subjects));
        System.out.println(kim.showInfo(kim.subjects));
    }
}

 

1) StringBuilder 사용

- 단순 이어붙이기

- 단점 : 마지막 구분자처리를 셀프로 해줘야함,,,귀찮

 public String getSubjectName(){
        StringBuilder sbb = new StringBuilder();
        for( Subject sb : subjects){
            sbb.append(sb.getSubjectName() + ","+ sb.getScore()).append(",");
        }

        return sbb.toString();
}

콘솔 결과

 

 

728x90

2) StringJoiner 사용 ( 자바8이상, 코드가 깔끔하고, 구분자 처리하기 좋음)

- StringJoiner는 StringBuilder와 성능은 비슷하지만 더 간결한 방법으로 문자열을 결합할 수 있음

- 구분자(, )를 자동으로 처리하며, 마지막 쉼표를 제거하는 수고를 덜어줍

 public String getSubjectName(){
        StringJoiner sbb = new StringJoiner(",");
        for( Subject sb : subjects){
            sbb.add(sb.getSubjectName() + " " + sb.getScore());
        }
        
        return sbb.toString();       
}

콘솔 결과

 

 

 

3) String.join 사용 ( 리스트를 이용하여 데이터를 처리하고, join()으로 연결하는 방식)

- String 타입의 리스트에 담은 후 String.join으로 이어붙이기

public String getSubjectName(){
	List<String> list = new ArrayList<>();
        for( Subject sb : subjects){
            list.add(sb.getSubjectName() + "," +sb.getScore());
        }
        
        return String.join(",",list);
}

콘솔 결과

반응형

 

 

 

4) Stream 사용 ( 자바8이상, 가장 코드가 간결함 )

- 고급 작업이 필요하거나 선언적인 방식이 선호될때 사용

public String getSubjectName(){
	return subjects.stream().map(sb->sb.getSubjectName() +" " +sb.getScore()).collect(Collectors.joining(","));
}

콘솔 결과

 

 

 

 

 

 

반응형