Я новичок в лямбда-выражениях и пытаюсь использовать их, чтобы уменьшить следующий код до эквивалента лямбда. Я посмотрел на сокращение и flatMap и forEach, а также на несколько других вещей, но я, очевидно, пропустил что-то, потому что все, что я пытаюсь, либо синтаксически неверно, либо у меня нет ссылки на то, что мне нужно.
Мне нужно выполнить анализ каждого элемента по отношению ко всем другим элементам в коллекции. Я закодировал это как вложенные циклы с условным. После определения несоответствующих элементов вычисление выполняется с использованием обоих элементов. Наконец, мне нужен набор результатов для каждого сравнительного вычисления.
Итак, здесь исходный код:
final List<Element> updated = new ArrayList<>(elements.size());
for (final Element first : elements) {
Attribute newAttribute = first.getAttribute();
for (final Element second : elements) {
if (!first.equals(second)) {
newAttribute = newAttribute.add(computeChange(first, second));
}
}
final Element newElement = new Element(first.getEntry(), newAttribute, first.getValue());
updated.add(newElement);
}
Затем я пробовал множество вариаций лямбда-выражений, самым простым из которых является:
elements.parallelStream()
.map(first -> new Element(first.getEntry(), first.getAttribute().add(
computeChange(first, second)), first
.getValue())).collect(Collectors.toList()));
Очевидно, это неверно, поскольку для меня нет ссылки на второй доступ, и условие/фильтр для второго не равно первому.
Как уменьшить этот вложенный цикл с условным возвратом коллекции в lambda-выражение?
Любая помощь здесь очень ценится.