Я новичок в lambdas и фильтрую потоки и прочее в Java 8. Мне очень сложно с синтаксисом преобразования этого в стиль Java 8. Даже не убежден, что это возможно.Как написать это как Лямбда/Поток/Фильтр?
private List<RecordWrapperDto>filterRecordWrapperDtos(List<RecordWrapperDto> recordWrapperDtos){
List<RecordWrapperDto> filteredRecordWrapperDtos = new ArrayList<>();
Long recordId = null;
for(RecordWrapperDto rwDto : recordWrapperDtos) {
if(rwDto.getRecordWrapperId() != null && (recordId == null || recordId.equals(rwDto.getRecordId()))) {
filteredRecordWrapperDtos.add(rwDto);
recordId = rwDto.getRecordId();
}
}
return filteredRecordWrapperDtos;
}
Вот одна из моих попыток (неправильно конечно):
if(CollectionUtils.isNotEmpty(recordWrapperDtos)) {
filteredRecordWrapperDtos = recordWrapperDtos.stream().filter(c -> {
return (c.getRecordWrapperId() != null && (recordId == null || recordId.equals(c.getRecordId())));
}).collect(Collectors.toList());
}
Тхо меня кость? Одна из проблем заключается в том, что между каждым циклом сохраняется состояние. Возможно ли это сделать? Также в каждом примере я видел, если у вас было более одного параметра, например. (a,b) -> { stuff }
, это был тот же тип, где «a» был одним элементом, а «b» был следующим элементом в коллекции ... что, если это не так? Могу ли я использовать это, чтобы что-то передать? Если это так, я не нахожу примеров.
вы проверяете 'rwDto.getRecordWrapperId()! = Null', но вы никогда не используете его. не так ли? (потому что похоже, что вы берете первый идентификатор элемента, а затем берете все те, у которых один и тот же идентификатор записи) – njzk2
Есть слишком много возможных ответов, или хорошие ответы будут слишком длинными для этого формата. Пожалуйста, добавьте детали, чтобы сузить набор ответов или изолировать проблему, на которую можно ответить в нескольких абзацах. –
Вы правильно определили проблему: сохранение состояния во время обработки делает использование потоков трудными и непрактичными. Как я читаю ваш код, вы пытаетесь убедиться, что для каждого значения 'recordId' сохраняется только одна запись. Не могли бы вы просто перефразировать свое решение, чтобы построить карту? – biziclop