2016-11-29 2 views
8

을 나열하려면 이 방법으로 문자열 목록 :자바 8 변환 문자열 내가 문자열을 <Integer>

List<String> list = Stream.of("1, 2, 3").collect(Collectors.toList()); 

int의 목록에 없습니다.

아이디어가 있으십니까?

+4

마지막 줄의 코드는 값이 "1, 2, 3"'인 정확히 하나의 문자열을 가진 목록을 제공합니다. 당신은'Stream.of ("1", "2", "3")'을 의미 했습니까? – Jesper

답변

17

찾고있는 것입니다. 정확히 않는 splitAsStream(input) 방법 :

Pattern pattern = Pattern.compile(", "); 
List<Integer> list = pattern.splitAsStream(ints) 
          .map(Integer::valueOf) 
          .collect(Collectors.toList()); 

그것은 당신이 나중에 Integer에 매핑 목록으로 수집 할 수 있음을, 입력 문자열의 일부의 Stream<String>을 반환합니다.

패턴을 상수에 저장하고 필요할 때마다 다시 사용할 수 있습니다.

+2

@Igor 승자는 실제로 없으며 작업을 수행하는 데는 다른 솔루션이 있습니다. 배열을 생성하고 그것을 Stream에 전달.구문 분석하고자하는 문자열과 정확한 구분 기호 (''가 아닌 경우)에 따라 'splitAsStream'이있는이 솔루션은 다른 것보다 빠를 수도 있습니다. 이를 측정해야합니다. – Tunaki

+4

나는 광산보다 이걸 더 좋아할 것이다. 'Pattern.splitAsStream()'메소드를 알지 못했습니다. 우수한! –

+6

'Pattern.compile (",", Pattern.LITERAL);'을 사용하면 실제 패턴 매칭이 없다는 것을 엔진에 알릴 수 있습니다. 물론 엔진은 플래그없이 자체를 발견하지만 플래그를 지정하면 패턴을 분석하는 프로세스를 건너 뜁니다. – Holger

14

정규 표현식 분할하면 당신은 문자열을 분할하고 각 부분에서 스트림을 만들 필요가

Stream.of(ints.split(", ")) 
     .map(Integer::parseInt) 
     .collect(Collectors.toList()); 
+0

네,하지만 그는 구체적으로이 문제를 해결하기 위해 Java8 방법을 요구했습니다 –

+0

리스트를 만들지 않을 것입니다. Rainer

+5

입력이 배열 인 경우, 즉 실제 varargs 호출이없는 경우 항상'Arrays.stream'을 사용하는 것이 좋습니다. 이것은 우리가 배열을 통해 스트리밍하고 단일 요소 스트림을 생성하는 대신 원시 타입의 배열에 대해 올바로 작동한다는 것을 분명히합니다. 이 특정한 경우에, 둘 다 똑같이 할 것입니다. – Holger

2

먼저 문자열을 개별 숫자로 분리 한 다음 해당 문자열 (실제 문자열)을 실제 정수로 변환하고 마지막으로 목록에서 수집하십시오. 스트림 작업을 연결하여이 모든 작업을 수행 할 수 있습니다.

String ints = "1, 2, 3"; 
List<Integer> intList = Stream 
     .of(ints.split(", ")) 
     .map(Integer::valueOf) 
     .collect(Collectors.toList()); 
System.out.println(intList); // [1, 2, 3] 
0

배열 기능 asList를 사용하여 java8 방식으로 변환 할 수 있습니다.

공백을 반드시 삭제하십시오.

List<Integer> erg = Arrays.asList(ints.replace(" ", "").split(",")).stream().map(Integer::parseInt).collect(Collectors.toList()); 

편집 : 나는 그것이 문자열의 배열라고 생각, 하나의 문자열 것을 보지 못했다 죄송합니다.

관련 문제