문제

나는 목록의 정수, List<Integer> 고 싶 변환 모든 정수는 개체 문자열로,따라서 마무리와 함께 새로운 List<String>.

자연스럽게,나를 만들 수 있는 새로운 List<String> 와 루프를 통해 목록화 String.valueOf() 에 대한 각 정수,하지만 내가 궁금했을 경우는 더 나은(읽기: 더 오토 인)방법의 그것을 하고 있는가?

도움이 되었습니까?

해결책

멀리로 나가 알고,반복하고,인스턴스화하는 작업을 수행할 수 있는 유일한 방법이.같은 것(다른 사람에 대한 잠재적인 도움 때문에,나는 당신이 작업을 수행하는 방법을 알고):

List<Integer> oldList = ...
/* Specify the size of the list up front to prevent resizing. */
List<String> newList = new ArrayList<String>(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 입니다.

에 대한 솔루션 Java8.비트 이상 구아바 중 하나,하지만 적어도 당신을 설치할 필요가 없습니다.

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-이는'당신은 사용할 수 있다 변압기수집 방법Apache Commons, 예:

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);

의 원본 문자열입니다.valueOf 이 보여줍니다.

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

지하지 않는 것이 문제이지만,내가 사용하는 것 toString.

대신 사용하여 문자열입니다.valueOf 나는 사용.toString();그것은 피부의 자동 권투에 의해 설명@조나단.네덜란드

Javadoc 는 것을 말한 valueOf 반환하는 것과 같의 정수입니다.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(", "));

다른 솔루션을 사용하여 구아바고 Java8

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<String> strings = Lists.transform(numbers, number -> String.valueOf(number));

지 핵심 Java,and not generic-ified 지만,자카르타의 인기있는 커먼즈 라이브러리 컬렉션은 몇 가지 유용한 추상화를 위해 이런 종류의 작업입니다.특히,보라 수집하는 방법에 대

CollectionUtils

고려해야 할 뭔가 이미 사용하고 있는 경우에는 공 컬렉션에서 귀하의 프로젝트입니다.

을 걱정하는 사람들이"권투에서"jsight 의 대답:가 존재하지 않는다는 사실입니다. String.valueOf(Object) 은 여기에 사용되는,그리고 없이 개봉하기 int 은 이제까지 수행됩니다.

사용 여부 Integer.toString()String.valueOf(Object) 는 방법에 따라 처리할 가능 null.당신이 원하는 예외를 발생시(아마도),또는"null"문자열에서 당신의 목록은(아마도).전자의 경우,당신을 던져 NullPointerException 거나 일부 다른 종류?

또한,하나의 작은 결함 jsight 의 응답: List 인터페이스을 사용할 수 없습니다 이 새 연산자니다.나는 것 아마 사용 java.util.ArrayList 이 경우에,특히 때문에 우리가 알고있는 앞에 얼마나 긴 목록이 될 가능성이 높습니다.

@요나단내가 잘못 될 수 있다,하지만 믿는 문자열입니다.valueOf()이 경우에는 호출의 문자열입니다.valueOf(Object)함수보다는 점점 박스 문자열입니다.valueOf(int).문자열입니다.valueOf(객체)를 반환"null"는 경우 null 또는 전화체입니다.toString()null 이 아닌 경우에는 포함하면 안된 복싱(지만 명백하게 인스턴스화하는 새로운 문자열체 관련).

나는 생각을 사용하여 개체입니다.toString()이외의 다른 목적으로 디버깅은 아마 정말 나쁜 생각하더라도,이 경우에는 두 가지 기능이 동일하다면(목록이 없 null).개발자는 자유롭게 변경할 수 있으며 동의 모든 toString()메소드는 어떤 경고없이 포함한 toString()메서드의 모든 클래스에서는 표준 라이브러리입니다.

하지 않더라도 걱정하는 성능 문제가 발생합 복싱/unboxing 과정입니다.면 성능이 중요한 사용,배열입니다.면 그것은 정말 중요한지,사용하지 않는 Java.력을 압도하는 JVM 으로 이어질 것입를 담았다.

응답에 대한 전문가들만 사용:

    List<Integer> ints = ...;
    String all = new ArrayList<Integer>(ints).toString();
    String[] split = all.substring(1, all.length()-1).split(", ");
    List<String> strs = Arrays.asList(split);

Lambdaj 을 수행 할 수 있습는 매우 간단하고 읽기 쉬운 방법입니다.예를 들어,동 목록의 정수와 당신은 당로 변환하려면 해당 문자열 표현을 같은 것을 작성할 수 있습니다 그;

List<Integer> ints = asList(1, 2, 3, 4);
Iterator<String> stringIterator = convertIterator(ints, new Converter<Integer, String> {
    public String convert(Integer i) { return Integer.toString(i); }
}

Lambdaj 적용합 변환 기능을하는 동안에만 당신이 결과를 반복합니다.

당신은 피할 수 없다"복싱 오버헤드";자바의 인조 일반 컨테이너 저장할 수 있습니다,그래서 당신의 정수해야 합 박스로 정수입니다.원칙적으로 그것을 피할 수 있는 낙심에서 객체의 정수(기 때문에 무의미하기 때문에,개체 위해 충분히 좋은 두 문자열입니다.valueOf 과 개체입니다.toString)그러나 내가 알지 못하는 경우 컴파일러를 충분히 똑똑하다.변환 문자열에서 객체해야에 더 많거나 적 a no-op,그래서 난 것키지 않에 대해 걱정하는 하나입니다.

그냥 재미를위한 솔루션을 사용하여 jsr166y fork-join 는 프레임워크에서 JDK7.

import java.util.concurrent.forkjoin.*;

private final ForkJoinExecutor executor = new ForkJoinPool();
...
List<Integer> ints = ...;
List<String> strs =
    ParallelArray.create(ints.size(), Integer.class, executor)
    .withMapping(new Ops.Op<Integer,String>() { public String op(Integer i) {
        return String.valueOf(i);
    }})
    .all()
    .asList();

(면책 조항:컴파일되지 않습니다.사양은 완성.등.)

가능성에 JDK7 트의 입력 추론,통사론적 설탕을 만드는 withMapping 를 호출하게 표시:

    .withMapping(#(Integer i) String.valueOf(i))

이 같은 기본적인 것을 사용하지 않을 것 외부 라이브러리(원인이 됩니다 종속 프로젝트에서 당신은 아마이 필요하지 않).

우리는 등의 정적 방법을 구체적으로 만들어진 이 류의 작업입니다.에 대한 코드가 없기 때문에 이것은 그렇게 간단 우리는 핫스팟의 최적화를 수행하습니다.이 테마가 될 것으로 보인에서 내 코드는 최근:쓰 매우 간단(간단)코드고 핫스팟요.우리는 거의 없는 성능 문제의 주위에 다음과 같은 코드를 이 경우 새로운 VM 버전이 함께 나오는 모든 여분의 속도 혜택 등입니다.

으로 많은 사랑으로 내가 자카르타 컬렉션,그들은 지원하지 않는 제네릭 사용 1.4 으로 보여주는 기능입니다.나는 주의 구글은 컬렉션이기 때문에 나열되어 있으로 알파 지원 수준!

나는 보지 않는 모든 솔루션은 다음과 같은 주의 공간 복잡합니다.는 경우 정수 목록은 많은 요소가 다음 큰 문제입니다.

It will be really good to remove the integer from the List<Integer> and free
the space, once it's added to List<String>.

우리가 사용할 수 있습니다 반복자를 달성하는 동일합니다.

    List<Integer> oldList = new ArrayList<>();
    oldList.add(12);
    oldList.add(14);
    .......
    .......

    List<String> newList = new ArrayList<String>(oldList.size());
    Iterator<Integer> itr = oldList.iterator();
    while(itr.hasNext()){
        newList.add(itr.next().toString());
        itr.remove();
    }

I just wanted 차임과 객체 지향적 솔루션하는 문제입니다.

는 경우에 당신은 모델을 도메인 물체를 해결책은 도메인에 있는 개체입니다.도메인 목록입니다 정수의는 우리가 원하는 문자열 값입니다.

가장 쉬운 방법은 것을 변환하는 모든 목록.

즉,기 위해서는 변환하는 변환없이 변경이 원래의 목록을 정수의 값 값은 다음과 같은 이...

class Value {
    Integer value;
    public Integer getInt()
    {
       return value;
    }
    public String getString()
    {
       return String.valueOf(value);
    }
}

이 될 것이다 빠르고 적은 메모리보다 복사 목록입니다.

행운을 빕니다!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top