Используйте IntStream
от 0 до половины размера списка, и умножить элементы на 2:
List<String> joined =
IntStream.range(0, strList.size()/2)
.mapToObj(i -> "(" + strList.get(2*i) + " "
+ strList.get(2*i + 1) + ")")
.collect(Collectors.toList());
Это ставит присоединился элементов в новый список. Для того, чтобы избавиться от не-присоединились элементов из первоначального списка, и предварять соединяемые элементы, мы можем использовать subList
, который является изменяемым видом списка:
List<String> subList = strList.subList(0, strList.size()/2 * 2);
subList.clear();
subList.addAll(joined);
Ideone Demo
альтернатива подсписка материал будет обрабатывать последний элемент в потоке тоже:
List<String> joined =
IntStream.range(0, (1 + strList.size())/2)
.mapToObj(i ->
(2*i + 1) < strList.size()
? "(" + strList.get(2*i) + " " + strList.get(2*i + 1) + ")"
: strList.get(2*i))
.collect(Collectors.toList());
Ideone demo