Ответ Эрана, вероятно, в порядке; но поскольку buttonFunctionList
(предположительно) является списком, существует вероятность того, что он будет содержать повторяющиеся элементы, что означает, что исходный код будет добавлять флажки в связанный список несколько раз.
Итак, вот альтернативный подход: вы добавляете флажок в список столько раз, сколько встречается идентификатор этого элемента в другом списке.
Таким образом, вы можете написать внутренний цикл как:
int n = Collections.frequency(buttonFunctionList, checkBox.getId();
associatedCheckboxList.addAll(Collections.nCopies(checkBox, n);
Таким образом, вы можете написать это как:
List<CheckBox> associatedCheckBoxList =
checkBoxList.flatMap(cb -> nCopies(cb, frequency(buttonFunctionList, cb.getId())).stream())
.collect(toList());
(Использование статического импорта для краткости)
Если либо checkBoxList
, либо buttonFunctionList
велико, вы можете рассмотреть возможность вычисления частот один раз:
Map<String, Long> frequencies = buttonFunctionList.stream().collect(groupingBy(k -> k, counting());
Тогда вы можете просто использовать это в лямбде в качестве параметра n
для nCopies
:
(int) frequencies.getOrDefault(cb.getId(), 0L)