2014-12-04 5 views
1

после прочтения о потоках Я пытаюсь использовать их сейчас и уже с простыми примерами возникают первые вопросы. Я хотел бы реализовать очень простой алгоритм шифрования, который использует подстановку. Существует некоторый текст, который будет зашифрован:Слияние потоков с Java 8

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

Существует некоторый пароль:

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

Идея теперь, чтобы добавить значения пароля для текстовых значений. Результат должен быть

1 + 1, 2 + 5, 3 + 7, 4 + 3, 5 + 1, 6 + 5, ...

Так что я должен создать поток с паролем, который начинается с начала при достижении конца вышеуказанного списка. Эта часть, которую я уже успел сделать.

Теперь мне как-то нужно объединить 2 потока в 1 поток. Любые идеи, как это сделать?

ответ

5

я бы, вероятно, поток индексов здесь:

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

Я думаю, вам нужно вызвать 'boxed()', прежде чем вы сможете собрать IntStream. Или я ошибаюсь? – Roland

+3

@Roland: да, но вы также можете использовать 'mapToObj' вместо' map', тогда вам не нужно вызывать 'boxed()' впоследствии. Или вы используете 'toArray()' вместо 'collect (toList()), поскольку OP не указывал, что делать с' Stream' впоследствии. – Holger

+0

Это простой поток, а не цикл for, как показано ниже. Хотя это функциональное выражение, мое намерение действительно заключалось в потоке содержимого большого файла, а также для потоковой передачи пароля. Хотя решение очень важно, я хотел узнать, могут ли потоки быть объединены ... – micgn

0

Эти списки ваш результат также будет список.

Вы создаете новый список 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

Да, я ответил на вопрос, не имеющий смысла, но есть мнение, что вместо того, чтобы быть кратким и чистым, мы не рискуйте быть просто бит загадочным, о том, что мы делаем. –

Смежные вопросы