如何有效地从列表中删除

How to efficiently remove from list

我有一个使用注意事项,我需要将一组过滤器应用于字符串列表,并在有某种原因说明为什么应将其过滤掉时从列表中删除字符串。我目前是这样做的:

private List<Data> applyFilter(Request request) {

        if (CollectionUtils.isNotEmpty(request.getDataList())) {
            Map<String,Data> map =
                    request.getDataList()
                            .stream()
                            .collect(Collectors.toMap(Data::getId, data -> data));

            for (Data data : request.getDataList()) {
                for (final Filter<Request> filter : filters) {
                    if (filter.getReason(data) != null) {
                        map.remove(data.getId);
                    }
                }
            }

            return (List<Data>) map.values();
        }
        return new ArrayList<>();
}

有没有比我目前的方法更有效的方法?此外,在我当前的方法中,如果字符串具有过滤原因,我仍将对其进行迭代,因为我正在对列表进行迭代。如果前一个过滤器有原因,我如何确保我不会为下一个过滤器迭代字符串。

谢谢

与Java8+

List<Data> filtered = request.getDataList().stream()
            .filter(data -> filters.stream()
                    .noneMatch(f -> f.getReason(data) != null))
            .collect(Collectors.toList());