[java] List <Integer>를 List <String>으로 변환

정수 목록이 있고 List<Integer>모든 정수 개체를 문자열로 변환하여 새로운 List<String>.

당연히 새를 만들고 각 정수를 List<String>호출하는 목록을 반복 할 수 String.valueOf()있지만 더 나은 (read : more automatic ) 방법 이 있는지 궁금 합니다.



답변

내가 아는 한, 반복하고 인스턴스화하는 것이 이것을 수행하는 유일한 방법입니다. 다음과 같은 것 (다른 사람에게 도움이 될 수있는 방법을 알고 계실 것입니다) :

List<Integer> oldList = ...
/* Specify the size of the list up front to prevent resizing. */
List<String> newList = new ArrayList<>(oldList.size());
for (Integer myInt : oldList) { 
  newList.add(String.valueOf(myInt)); 
}


답변

사용 구아바 – 프로젝트에서 구글 컬렉션 , 당신은 사용할 수 transform의 방법을 나열 클래스

import com.google.common.collect.Lists;
import com.google.common.base.Functions

List<Integer> integers = Arrays.asList(1, 2, 3, 4);

List<String> strings = Lists.transform(integers, Functions.toStringFunction());

에서 List반환 된 transform것은 백업 목록 의 보기 입니다. 변환은 변환 된 목록에 대한 각 액세스에 적용됩니다.

그주의 Functions.toStringFunction()발생합니다 NullPointerException확실 목록이 null이 포함되지 않습니다 경우 그렇게 밖에 이용, 널 (null)에 적용 할 때.


답변

Java 8을위한 솔루션입니다. Guava보다 약간 길지만 최소한 라이브러리를 설치할 필요는 없습니다.

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

//...

List<Integer> integers = Arrays.asList(1, 2, 3, 4);
List<String> strings = integers.stream().map(Object::toString)
                                        .collect(Collectors.toList());


답변

당신이하고있는 일은 괜찮지 만 ‘Java-it-up’이 필요하다고 느끼면 TransformerApache Commonscollect 메소드 를 사용할 수 있습니다. 예 :

public class IntegerToStringTransformer implements Transformer<Integer, String> {
   public String transform(final Integer i) {
      return (i == null ? null : i.toString());
   }
}

..그리고..

CollectionUtils.collect(
   collectionOfIntegers,
   new IntegerToStringTransformer(),
   newCollectionOfStrings);


답변

String.valueOf의 소스는 다음을 보여줍니다.

public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
}

그다지 중요하지는 않지만 toString을 사용합니다.


답변

String.valueOf를 사용하는 대신 .toString (); @ johnathan.holland가 설명하는 일부 자동 복싱을 피합니다.

javadoc은 valueOf가 Integer.toString ()과 같은 것을 반환한다고 말합니다.

List<Integer> oldList = ...
List<String> newList = new ArrayList<String>(oldList.size());

for (Integer myInt : oldList) {
  newList.add(myInt.toString());
}


답변

비 JDK 라이브러리로 속임수없이 한 줄짜리 솔루션이 있습니다.

List<String> strings = Arrays.asList(list.toString().replaceAll("\\[(.*)\\]", "$1").split(", "));