В вашей задаче есть странные требования.Во-первых, логика может быть полностью описана в терминах списков, нет необходимости указывать, что один список должен быть ArrayList
, а другой - LinkedList
.
Также нецелесообразно требовать использованияStream API для задачи, особенно для задачи, которая не подходит для Stream API.
Было бы более разумно, если бы LinkedList
был назначен с намерением использовать его возможность дешевых вставок при произвольномпозиции.Это преимущество может быть использовано только при использовании итератора , для которого при LinkedList
все методы доступа на основе индекса фактически снижают производительность.
Такое решение может выглядеть как
// prerequisites
List<Integer> arrayList = new ArrayList<>(Arrays.asList(2,4,5));
List<Integer> linkedList = new LinkedList<>(Arrays.asList(1,3,8,7,6));
// changing linkedList
ListIterator<Integer> iterator = linkedList.listIterator();
for(Integer i: arrayList) {
while(iterator.hasNext()) {
if(iterator.next() > i) {
iterator.previous();
break;
}
}
iterator.add(i);
}
// 1->2->3->4->5->8->7->6
System.out.println(linkedList.stream()
.map(Object::toString).collect(Collectors.joining("->")));
Это адаптировано к LinkedList
, поскольку позволяет избежать многократного повторения при вставке в позиции, уже связанные с итератором.
Эта логика не может быть выражена с помощью Stream API, по крайней мерене без нарушения некоторых его правил.Прочитайте Невмешательство и Режимы без сохранения состояния для получения более подробной информации.