StringJoiner Class
Java 8에는 다양한 기능들이 많이 추가 되었습니다.
제 블로그에서 몇가지 굴직한것들은 이미 소개를 해드렸습니다만 (Optional, Default Method, CompletableFuture) 간단하지만 편리한 API를 소개하고자 합니다.
Java8에는 String.join() 메서드가 추가되었습니다.
내부를 들여다 보지는 않았지만 default method로 추가되지 않았을까 하는 가능성있는 추측을 해봅니다.
간단하니 예제를 보고 쉽게 사용하시면 됩니다.
ArrayList foods = new ArrayList<>();
foods.add("피자");
foods.add("치킨");
foods.add("맥도날드");
foods.add("불고기");
foods.add("샐러드");
System.out.println(String.join(", ", foods));
결과는 아래와 같습니다.
피자, 치킨, 맥도날드, 불고기, 샐러드
어렵지 않습니다.
join("추가할 문자", "대상 list")
join("추가할 문자", "대상 Array")
list 뿐만 아니라 array를 넣어도 추가한 문자가 붙어서 출력됩니다.
String[] color = new String[] { " 빨강", "노랑", "초록", "파랑" };
System.out.println(String.join("+ ", color));
빨강+ 노랑+ 초록+ 파랑
만약 stream의 collect() 안에서 사용하고 싶다면 아래와 같이 Collectors.joining() 을 사용하면 됩니다.
System.out.println(foods.stream().collect(Collectors.joining(", ")));
피자, 치킨, 맥도날드, 불고기, 샐러드
Sql을 만들때도 쉽지 않을까?
DB에서 in 연산자를 이용해서 sql을 하지 않으시는지요?
제가 이 api를 보고 문득 들었던 생각은 sql 연산자인 in쓸때 좋겠다 입니다.
간단하게 아래와 같이 예제를 만들어 보겠습니다.
Android에서 해당 contact의 _id를 알고 있을때 여러게를 insert해오는 구문 입니다.
String[] param = new String[] {" 1", "100", "154","155","21"};
String paramforIn = String.join(",", param);
StringBuilder sql = new StringBuilder();
sql.append("Select * from raw_contacts where _id in (")
.append(paramforIn).append(")");
System.out.println(sql.toString());
결과는 예상한것과 같습니다.
Select * from raw_contacts where _id in (1,100,154,155,21)
만약 한글이라서 '홍길동','임꺽정' 처럼 해야 한다면 어떻게 해야할까요?
저는 요렇게 하지 않을까 싶네요.
String[] names = new String[] {"홍길동", "임꺽정", "슈퍼맨", "배트맨", "아이언맨" };
List<String> nameList = Arrays.asList(names);
String sql1 = nameList.stream()
.map(name -> "'" + name + "'" )
.collect(Collectors.joining(","));
System.out.println(sql1);
결과는 아래와 같습니다.
'홍길동','임꺽정','슈퍼맨','배트맨','아이언맨'
'개발이야기 > Java' 카테고리의 다른 글
람다의 내부동작 #1 (0) | 2017.09.24 |
---|---|
Java 8 Comparator (0) | 2017.09.14 |
Java 8 Lambda Expression - 람다식 #4 (0) | 2017.09.12 |
Java 8 Lambda Expression - 람다식 #3 (0) | 2017.09.12 |
Java 8 Lambda Expression - 람다식 #2 (1) | 2017.09.12 |