我有一个包含其他对象列表的对象,该对象包含另一个对象列表。非常像DTO。
在这些对象中,有一个其他类型的对象的列表,如果该对象包含特定的String,我想在其中删除该元素。

例如。

CustomerDTO customerDTO = CustomerTransformer.transformCustomer(custom);
List<InfoDTO> info = customerDTO.getInfo();
info(infoDTO -> {
    List<MoreDTO> d = infoDTO.getMore();
    for (MoreDTO moreDTO : d) {
        List<ChannelDTO> channels = MoreDTO.getChannels();
        for (ChannelDTO cdto : contentChannels) {
            if ("apple".equals(cdto.getId())) {
                moreDTO.getChannels().remove(cdto);
            }
        }
    }

});


但这实际上似乎并不高效,并且可能会更改空指针吗?有更好的书写方式吗?在流中使用流和使用过滤器会有所帮助吗?

我是Java新手。

最佳答案

在迭代/循环时,您无法从列表中删除元素,会有一个ConcurrentModificationException

因此,为了避免这种情况,您可以在此处使用Java 8 Filter,这样-

contentChannels = contentChannels
 .stream()
 .filter(cdto->(!"apple".equals(cdto.getId())))
 .collect(Collectors.toList());


另一种选择是使用removeIf()

10-08 20:16