Мне нужно преобразовать ниже метод java 8 в встроенную функцию. для этого нужна помощь специалиста и объяснение.
@Override
public boolean a(final Collection<DoseDetailMutableDTO> detailModels) {
for (DoseDetailMutableDTO dd : detailModels) {
final boolean doseDetailTextScheduled = isDoseDetailTextScheduled(dd, 1);
if (doseDetailTextScheduled) {
return true;
}
}
return false;
}
и есть ли какой-нибудь короткий путь, чтобы сделать эту Intel IDE?
@manfromnowhere Есть ли какие-либо сравнения того, что ide может или не может делать в отношении функций java 8? Мне очень интересно, откуда взялось это утверждение («Intellij предоставляет больше возможностей java 8, чем любая другая IDE»).
См. Статью Переход на Java 8.




Вы можете использовать Stream.anyMatch как:
public boolean a(final Collection<DoseDetailMutableDTO> detailModels) {
return detailModels.stream()
.anyMatch(dd -> isDoseDetailTextScheduled(dd, 1));
}
returns
trueif any elements of the stream match the provided predicate, otherwisefalse
Редактировать: (из комментариев)
The control to learn for such suggested shortcuts on IntelliJ IDEA is
Ctrl+Spaceor on MacOS can useAlt+Enteras well.
Элемент управления, который следует изучить для таких предлагаемых сочетаний клавиш в IntelliJIDEA, - это Ctrl+Space, или в MacOS также можно использовать Alt+Enter.
Этот комментарий может сопровождаться ответом IMO
Проблема здесь в том, что вы предполагаете, что isDoseDetailTextScheduled не имеет побочных эффектов. Чтобы получить такой же порядок работы «для», вам нужно использовать Tim Biegeleisens - solution. То же самое касается параллельного выполнения потока.
Мы можем попробовать использовать поток здесь:
@Override
public boolean a (final Collection<DoseDetailMutableDTO> detailModels) {
return detailModels.stream()
.filter(x -> isDoseDetailTextScheduled(x, 1))
.findFirst()
.orElse(false);
}
На самом деле, чтобы сделать ваш метод null безопасным, в случае, если список ввода может быть null, мы можем попробовать следующее:
@Override
public boolean a (final Collection<DoseDetailMutableDTO> detailModels) {
return Optional.ofNullable(detailModels)
.map(Collection::stream)
.orElseGet(Stream::empty)
.filter(x -> isDoseDetailTextScheduled(x, 1))
.findFirst()
.orElse(false);
}
первый пример можно упростить до .findFirst().isPresent(), а второй - до return detailModels != null && detailModels.stream().filter(x -> isDoseDetailTextScheduled(x, 1)) .findFirst().isPresent();. следует избегать создания Optional только для проверки того, является ли что-то нулевым или нет, поскольку он требует больше памяти и противоречит основной цели Optional.
Для этого можно использовать anyMatch.
Поскольку второй параметр функции является постоянным, вы можете написать метод, вызывающий isDoseDetailTextScheduled.
Думаю, становится еще лаконичнее:
public boolean a(final Collection<DoseDetailMutableDTO> detailModels) {
return detailModels.stream().anyMatch(this::isDoseDetailTextScheduledOne);
}
public boolean isDoseDetailTextScheduledOne(DoseDetailMutableDTO dto) {
return isDoseDetailTextScheduled(dto, 1);
}
Intellij Предоставляет больше возможностей Java 8, чем любая другая IDE. Вобще
ctrl space. Даже если это изменит ваш традиционный цикл на лямбда, попробуйтеRightClick ->Analyse->Inspect code