Вы можете создать список сумм в одной строке, сопоставляя потоки (я добавил добавление разрывов строк для удобочитаемости):
//made some example lists
List<Float> list1 = Arrays.asList(new Float[]{1F, 2F, 3F});
List<Float> list2 = Arrays.asList(new Float[]{2F, 3F, 4F});
// Get the list with all the sums
List<Float> sums = list1.stream()
.map( f -> (list2.get(list1.lastIndexOf(f)) + f ) )
.collect(Collectors.toList());
// Get the index of the max pair
int maxIndex = sums.indexOf(sums.stream().max(Float::compareTo).get());
Просто передайте первый список в очередь и .map
его (картакак foreach, но возвращает результат для каждого элемента списка).
Что происходит на карте: для каждого элемента он находит самый высокий индекс для текущего значения f
в списке 1. Это будет индекс текущего элемента в первомсписок.Затем он получает значение для этого индекса во втором списке.list2.get(list1.lastIndexOf(f))
.Так что теперь вы добавляете текущее значение f
к этому.Таким образом, для полной длины списка 1 вы выводите сумму двух значений, имеющих один и тот же индекс.
Тогда вам просто нужно .collect
вернуть их обратно в список.
Наконец, чтобы найти максимальный индекс, я бы выбрал тот же подход, что и вы.