[java] Java : List <String>을 문자열로 변환

자바 스크립트 Array.join()

js>["Bill","Bob","Steve"].join(" and ")
Bill and Bob and Steve

Java에는 이와 같은 것이 있습니까? StringBuilder를 사용하여 무언가를 만들 수 있다는 것을 알고 있습니다.

static public String join(List<String> list, String conjunction)
{
   StringBuilder sb = new StringBuilder();
   boolean first = true;
   for (String item : list)
   {
      if (first)
         first = false;
      else
         sb.append(conjunction);
      sb.append(item);
   }
   return sb.toString();
}

…하지만 JDK의 일부인 경우에는 그렇게 할 필요가 없습니다.



답변

Java 8을 사용하면 타사 라이브러리 없이이 작업을 수행 할 수 있습니다.

문자열 컬렉션에 가입하려면 새로운 String.join () 메서드를 사용할 수 있습니다 .

List<String> list = Arrays.asList("foo", "bar", "baz");
String joined = String.join(" and ", list); // "foo and bar and baz"

String 이외의 다른 유형의 Collection이있는 경우 Join Collector 와 함께 Stream API를 사용할 수 있습니다 .

List<Person> list = Arrays.asList(
  new Person("John", "Smith"),
  new Person("Anna", "Martinez"),
  new Person("Paul", "Watson ")
);

String joinedFirstNames = list.stream()
  .map(Person::getFirstName)
  .collect(Collectors.joining(", ")); // "John, Anna, Paul"

StringJoiner클래스는 유용 할 수 있습니다.


답변

Apache Commons에 대한 모든 참조는 훌륭하지만 (대부분의 사람들이 사용하는 것입니다) 구아바에 해당하는 Joiner 는 훨씬 더 좋은 API를 가지고 있다고 생각합니다 .

당신은 간단한 조인 케이스를 할 수 있습니다

Joiner.on(" and ").join(names)

또한 쉽게 null을 처리합니다.

Joiner.on(" and ").skipNulls().join(names);

또는

Joiner.on(" and ").useForNull("[unknown]").join(names);

그리고 (commons-lang보다 우선적으로 사용하는 데 관심이있는 한) 유용하게 사용할 수 있습니다.

Map<String, Integer> ages = .....;
String foo = Joiner.on(", ").withKeyValueSeparator(" is ").join(ages);
// Outputs:
// Bill is 25, Joe is 30, Betty is 35

디버깅 등에 매우 유용합니다.


답변

기본적으로는 아니지만 많은 라이브러리가 비슷합니다.

커먼즈 랭 :

org.apache.commons.lang.StringUtils.join(list, conjunction);

봄:

org.springframework.util.StringUtils.collectionToDelimitedString(list, conjunction);


답변

안드로이드 당신은 사용할 수 TextUtils의 클래스를.

TextUtils.join(" and ", names);


답변

아니요, 표준 Java API에는 그러한 편리한 방법이 없습니다.

놀랍게도 Apache Commons는 StringUtils 클래스 에서 직접 작성하고 싶지 않은 경우 이러한 기능을 제공합니다 .


답변

Java 8의 세 가지 가능성 :

List<String> list = Arrays.asList("Alice", "Bob", "Charlie")

String result = String.join(" and ", list);

result = list.stream().collect(Collectors.joining(" and "));

result = list.stream().reduce((t, u) -> t + " and " + u).orElse("");


답변

Java 8 콜렉터를 사용하면 다음 코드를 사용하여 수행 할 수 있습니다.

Arrays.asList("Bill", "Bob", "Steve").stream()
.collect(Collectors.joining(" and "));

또한 Java 8에서 가장 간단한 솔루션 :

String.join(" and ", "Bill", "Bob", "Steve");

또는

String.join(" and ", Arrays.asList("Bill", "Bob", "Steve"));