我有一个包含其他对象列表的对象,该对象包含另一个对象列表。非常像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()