2014-12-04 3 views
1

으로 스트림을 병합합니다. 지금 사용하려고하고 있으며 간단한 예제가있는 첫 번째 질문이 있습니다. 내가 대체를 사용하는 아주 간단한 암호화 알고리즘을 구현하고 싶습니다. 암호화 할 텍스트가 :스트림을 읽은 후에 Java 8

private List<Integer> password = Arrays.asList(1, 5, 7, 3); 

아이디어는 텍스트 값으로 암호 값을 추가하는 지금 : 일부 암호가

static List<Integer> text = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 
     11, 12, 13, 14, 15, 16, 17, 18, 19, 20); 

. 결과

그래서 I 패스워드로부터 스트림을 만들어야

+ 1

1 + 5 2 + 7 3 + 3 (4) + 1 (5, 6) + 5, ... 있어야하는 위 목록의 끝에 도달하면 처음부터 시작됩니다. 이 부분은 이미 할 수있었습니다.

이제 어떻게 든 2 개의 스트림을 1 개의 스트림으로 병합해야합니다. 어떤 아이디어, 그것을 달성하는 방법?

답변

5

아마 여기에 인덱스를 스트리밍 할 것 :

IntStream.range(0, text.size()) 
     .map(i -> text.get(i) + password.get(i % password.size()) 
     .toArray(); 
+1

IntStream을 수집하려면 먼저 boxed()를 호출해야한다고 생각합니다. 아니면 내가 틀렸어? – Roland

+3

@Roland : 네,하지만 map 대신에 mapToObj를 사용할 수도 있습니다. 그런 다음 나중에 boxed()를 호출 할 필요가 없습니다. 또는 OP가'Stream' 이후에 무엇을 할 것인지 지정하지 않았기 때문에'collect (toList()) '대신'toArray()'를 사용합니다. – Holger

+0

아래의 for 루프 대신에 간단한 스트림을 사용하고 있습니다. 이것은 기능적인 표현 임에도 불구하고 실제로는 대용량 파일의 내용을 스트리밍하고 암호를 스트리밍하는 것이 었습니다. 솔루션이 매우 유효하더라도 스트림을 병합 할 수 있는지 배우고 싶었습니다 ... – micgn

0

이들은 당신의 결과는 목록이 될 것입니다 목록입니다.

새 List를 만들면 crypt = new ArrayList(); 텍스트 목록을 반복하고 텍스트 목록의 각 항목에 대해 텍스트 목록의 색인 인 암호 목록 색인에 값을 추가합니다. % password.size();

List<Integer> crypt= new ArrayList<Integer>(); 
for(int index= 0;index=<text.size();index++){ 
    crypt.add(text.get(index)+password.get(index % password.size()); 
} 
+0

예, 맞습니다! 그러나 나는 시내를 배우고 싶다. 스트림을 가지고 더 간결하고 깨끗하고 아름다운 것을 얻는다면 그것은 물론 조금은 의문입니다. – micgn

+0

예, 제가 요점을 놓치는 질문에 대답했지만, 간결하고 깨끗한 것보다는 오히려 간결하고 깨끗한 견해가 있습니다. 우리가하는 일에 대해 조금 신비가 될 위험이 있습니다. –

관련 문제